华为C/C++安全编程规范详解
5星 · 超过95%的资源 需积分: 45 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函数中,以保证资源的清理。
遵循这些规范,可以显著减少代码中的安全隐患,提高软件的可靠性,并有助于构建更加安全的软件系统。
621 浏览量
3313 浏览量
371 浏览量
669 浏览量
3313 浏览量
101 浏览量
古词失笔
- 粉丝: 0
- 资源: 4
最新资源
- 评估网球运动员
- SimCity-2000-portable:SimCity 2000 win95版的便携式运行程序和修补程序,可在Windows Vista7810上运行
- 当其包含的两个库中的两个具有相同符号(例如函数/变量)时,如何使用VC ++构建映像(DLL / EXE)
- hk1.3_ReciverFunction_
- ember_example
- 大型采访指南:MEGA采访指南,JavaSciript,前端,Comp Sci
- copr_scripts:COPR自定义构建脚本以构建各种RPM
- 基于知识图谱的推荐算法-RippleNet的实现.zip
- 雷神FFmpeg + SDL 的视频播放器修正版.rar
- Free Roblox Gift Card | Robux Gift Card 2021-crx插件
- asp+sql订单管理系统.zip
- 蓝黄扁平化商务图表整套下载PPT模板
- 电脑软件EfficientPIM-Setup日程管理软件.rar
- markdowns:存一些markdown【笑哭】
- 静态js
- 北京科技大学Reborn战队2024赛季老飞镖新代码.zip