华为C/C++安全编程规范详解

5星 · 超过95%的资源 需积分: 45 92 下载量 53 浏览量 更新于2024-07-09 收藏 906KB PDF 举报
"华为C&C++最新安全编程规范V3.1.pdf"是华为技术有限公司发布的一份针对C和C++编程的安全规范文档,旨在提升编程人员的安全意识,培养攻击者思维,确保编写的代码安全可靠。该规范适用于所有使用C/C++语言进行编程的开发人员。 规范的核心内容涵盖了多个方面,包括变量、断言、函数、循环、异常机制、类、以及安全退出等基础要求。以下是对这些内容的详细解释: 1. 变量: - 规则1.1.1强调指针变量、资源描述符变量和BOOL变量必须初始化,以防止使用未定义的值。 - 规则1.1.2指出释放资源后,应立即为指向资源句柄的变量赋予新值,以避免空悬指针。 - 规则1.1.3要求类的成员变量在构造函数中初始化,以确保对象状态的正确性。 - 规则1.1.4禁止对指针进行sizeof操作,防止获取不准确的内存大小。 - 建议使用const关键字来增强代码的稳定性,并对全局变量的多线程访问进行加锁保护。 2. 断言(ASSERT): - 规则1.2.1提倡使用宏定义断言,而不是直接调用assert函数,以便于控制和调试。 - 规则1.2.2强调运行时可能出错的情况不应依赖断言,而应使用错误处理机制。 - 规则1.2.3禁止在断言中更改运行环境,确保断言不影响程序的正常流程。 - 建议避免在一个断言中放置多条语句,以提高可读性和定位问题的准确性。 3. 函数: - 规则1.3.1规定数组作为参数传递时,应同时传递长度信息,防止缓冲区溢出。 - 规则1.3.2禁止在公共接口API函数中对参数进行ASSERT,以保持API的稳定性和兼容性。 - 对内容不修改的指针参数,建议声明为const,体现不可修改的意图。 - 提醒谨慎使用不可重入函数,以防止并发问题。 - 在函数开始时进行参数ASSERT检查(API除外),以尽早发现无效输入。 4. 循环: - 规则1.4.1要求所有循环都有明确的退出条件,避免无限循环。 5. 异常机制: - 规则1.5.1禁止使用C++异常机制,鼓励使用错误码或其他方式处理异常情况。 6. 类: - 规则1.6.1要求有构造函数的类也应有析构函数,保证资源的正确释放。 - 规则1.6.2指出构造函数中不应执行可能失败的操作,确保构造过程的成功。 - 规则1.6.3禁止在构造函数中创建线程,以防止线程生命周期与对象生命周期不匹配的问题。 - 规则1.6.4严禁使用`delete this`,以防对象自我销毁。 - 如果类的公共接口返回私有数据地址,应加const类型,防止意外修改。 7. 安全退出: - 规则1.7.1禁止使用atexit函数,以避免程序结束时的不确定性。 - 规则1.7.2严禁使用kill、TerminateProcess等函数终止其他进程,以维护系统稳定。 - 规则1.7.3禁止使用pthread_exit、ExitThread函数,确保线程的正常退出。 - 建议避免使用exit、ExitProcess函数,除非在main函数中,以保证资源的清理。 遵循这些规范,可以显著减少代码中的安全隐患,提高软件的可靠性,并有助于构建更加安全的软件系统。