华为C&C++安全编程规范V3.1核心要点
5星 · 超过95%的资源 需积分: 49 183 浏览量
更新于2024-07-15
2
收藏 902KB PDF 举报
"华为语言安全编程规范_V3.1.pdf"
华为C&C++语言安全编程规范旨在提供一套标准,以确保软件开发过程中的安全性,减少因编程错误导致的安全漏洞。该规范涵盖了多个方面,包括变量、断言、函数、循环、异常机制、类的设计以及程序的正确退出等。
1. **变量**
- 规则1.1.1强调对指针、资源描述符变量和BOOL变量初始化,以避免未定义的行为。
- 规则1.1.2指出,当资源释放后,相关变量应立即重置,防止悬空引用。
- 规则1.1.3规定类的成员变量应在构造函数中初始化,以确保对象处于已知状态。
- 规则1.1.4禁止对指针执行sizeof操作,因为这可能导致误解或错误。
2. **断言(ASSERT)**
- 规则1.2.1推荐使用宏定义断言,而不是直接调用assert函数,以便于管理和控制。
- 规则1.2.2警告不应使用断言处理可能在运行时发生的错误,因为它们不是错误处理机制。
- 规则1.2.3禁止在断言中更改运行环境,以保持程序稳定性。
3. **函数**
- 规则1.3.1要求当数组作为函数参数传递时,必须同时传递其长度,以防止缓冲区溢出。
- 规则1.3.2禁止在公共接口API函数中对参数使用ASSERT,以防止对外部可见的错误行为。
- 规则1.3.3建议将不变参数声明为const,以明确其用途和避免意外修改。
4. **循环**
- 规则1.4.1强调所有循环都应具有明确的退出条件,以防止无限循环。
5. **异常机制**
- 规则1.5.1规定禁用C++异常机制,可能是因为异常处理可能带来额外的复杂性和潜在的安全风险。
6. **类**
- 规则1.6.1提到如果定义了构造函数,应提供对应的析构函数,以保证资源的正确管理。
- 规则1.6.2告诫构造函数不应包含可能失败的操作,以防止对象处于不完整状态。
- 规则1.6.3禁止在构造函数中创建线程,防止线程生命周期与对象生命周期错配。
- 规则1.6.4严禁使用`delete this`,这可能导致对象的非法销毁。
- 规则1.6.5如果类的公共接口返回私有数据地址,应加上const修饰,防止意外修改。
7. **安全退出**
- 规则1.7.1禁止使用atexit函数,可能是因为它不能保证资源清理。
- 规则1.7.2严禁使用kill、TerminateProcess等函数结束其他进程,以防止意外中断。
- 规则1.7.3禁止使用pthread_exit、ExitThread,以维护线程的正常终止。
- 建议1.7.1建议避免在非main函数中使用exit、ExitProcess,以保证程序的正常清理流程。
这些规则和建议构成了华为C&C++语言安全编程的基础框架,旨在提高代码的健壮性、安全性和可靠性,降低被攻击的风险。开发者应严格遵循这些指导原则,以创建更安全的软件产品。
点击了解资源详情
点击了解资源详情
点击了解资源详情
2021-07-14 上传
2023-08-21 上传
点击了解资源详情
2022-06-12 上传
252 浏览量
暂时空缺
- 粉丝: 4
- 资源: 12
最新资源
- aqqa水文化学软件
- mybatis-generator-demo:mybatis逆向工程实践
- VC++屏蔽的编辑框 masked edit实例
- (修)10-18b2c电子商务网站用户体验研究——以京东商城为例.zip
- 基于matlab的拉普拉斯滤波实例分析.zip
- easyengine-vagrant:用于测试 Easy Engine 的 Vagrant 文件
- grader:一个用于创建和应用考试和测验的应用程序
- release-pr-test
- 基于matlab的高斯高通滤波实例分析.zip
- 搜索算法:穷举,爬山等
- PowerModels.jl:用于电网优化的JuliaJuMP软件包
- 基于matlab的高斯低通滤波实例分析.zip
- turbo-vim:Vim 支持 Tmux、RubyRails、Rspec、Git 和 RVM
- autodoc_pydantic:将pydantic模型无缝集成到您的Sphinx文档中
- VC++批量删除指定文件完整实例包
- MySQL学习教程.zip