在好例子网,分享、交流、成长!
您当前所在位置:首页C/C++ 开发实例常规C/C++编程 → 华为C编码规范

华为C编码规范

常规C/C++编程

下载此实例
  • 开发语言:C/C++
  • 实例大小:0.89M
  • 下载次数:9
  • 浏览次数:31
  • 发布时间:2022-01-17
  • 实例类别:常规C/C++编程
  • 发 布 人:y_bin_978300123
  • 文件格式:.pdf
  • 所需积分:4
 相关标签:

实例介绍

【实例简介】华为C编码规范

【实例截图】

【核心代码】

0 前言
    目的
    适用范围
    攻击者思维
    安全编码基本思想
    外部数据定义
    术语定义
1 基础要求
    1.1 变量
        规则1.1.1:指针变量、表示资源描述符的变量、BOOL变量声明必须赋予初值
        规则1.1.2:指向资源句柄或描述符的变量,在资源释放后立即赋予新值
        规则1.1.3:类的成员变量必须在构造函数中赋予初值
        规则1.1.4:严禁对指针变量进行sizeof操作
        建议1.1.1:尽量使用const
        建议1.1.2:全局变量的访问如果涉及多个线程,必须加锁
        建议1.1.3:同一个函数内,局部变量所占用的空间不要过大
    1.2 断言(ASSERT)
        规则1.2.1:断言必须使用宏定义,禁止直接调用assert函数
        规则1.2.2:运行时可能会导致的错误,严禁使用断言
        规则1.2.3:严禁在断言内改变运行环境
        建议1.2.1:不要将多条语句放在同一个断言中
    1.3 函数
        规则1.3.1:数组作为函数参数时,必须同时将其长度作为函数的参数
        规则1.3.2:严禁对公共接口API函数的参数进行ASSERT操作
        规则1.3.3:不对内容进行修改的指针型参数,定义为const
        建议1.3.1:谨慎使用不可重入函数
        建议1.3.2:字符串或指针作为函数参数时,请检查参数是否为NULL
        建议1.3.3:在函数的开始处对参数进行ASSERT操作(API除外)
    1.4 循环
        规则1.4.1:循环必须有退出条件
    1.5 异常机制
        规则1.5.1:禁用C 异常机制
    1.6 类
        规则1.6.1:如果有构造函数,则必须有析构函数
        规则1.6.2:构造函数内不能做任何有可能失败的操作
        规则1.6.3:严禁在构造函数中创建线程
        规则1.6.4:严禁出现 delete this操作
        规则1.6.5:如果类的公共接口中返回类的私有数据地址,则必须加const类型
        建议1.6.1:尽量避免定义public成员
    1.7 安全退出
        规则1.7.1:禁用atexit函数
        规则1.7.2:严禁调用kill、TerminateProcess函数终止其他进程
        规则1.7.3:禁用pthread_exit、ExitThread函数
        建议1.7.1:禁用exit、ExitProcess函数(main函数除外)
        建议1.7.2:禁用abort函数
2 字符串/数组操作
    规则2.1:确保有足够的存储空间
    规则2.2:对字符串进行存储操作,确保字符串有’\0’结束符
    规则2.3:外部数据作为数组索引时必须确保在数组大小范围内
    规则2.4:外部输入作为内存操作相关函数的复制长度时,需要校验其合法性
    规则2.5:调用格式化函数时,禁止format参数由外部可控
    规则2.6:调用格式化函数时,format中参数的类型与个数必须与实际参数类型一致
3 正确使用安全函数
    规则3.1:正确设置安全函数中的destMax参数
    规则3.2:禁止不正确地重定义或封装安全函数
    规则3.3:禁止用宏重命名安全函数
    规则3.4:禁止自定义安全函数
    规则3.5:必须检查安全函数返回值,并进行正确的处理
4 整数
    规则4.1:整数之间运算时必须严格检查,确保不会出现溢出、反转、除0
    规则4.2:整型表达式比较或赋值为一种更大类型之前必须用这种更大类型对它进行求值
    规则4.3:禁止对有符号整数进行位操作符运算
    规则4.4:禁止整数与指针间的互相转化
    规则4.5:禁止对指针进行逻辑或位运算(&&、||、!、~、>>、<<、&、^、|)
    规则4.6:循环次数如果受外部数据控制,需要校验其合法性
5 内存
    规则5.1:内存申请前,必须对申请内存大小进行合法性校验
    规则5.2:内存分配后必须判断是否成功
    规则5.3:禁止引用未初始化的内存
    规则5.4:内存释放之后立即赋予新值
    规则5.5:禁止使用realloc()函数
    规则5.6:禁止使用alloca()函数申请栈上内存
6 不安全函数
    规则6.1:禁止外部可控数据作为system、popen、WinExec、ShellExecute、execl, execlp, execle, execv,
execvp、CreateProcess等进程启动函数的参数
    规则6.2:禁止外部可控数据作为dlopen/LoadLibrary等模块加载函数的参数
    规则6.3:禁止使用外部数据拼接SQL命令
    规则6.4:禁止在信号处理例程中调用非异步安全函数
    规则6.5:禁用setjmp/longjmp
    规则6.6:禁止使用内存操作类危险函数
7 文件输入/输出
    规则7.1:创建文件时必须显式指定合适的文件访问权限
    规则7.2:必须对文件路径进行规范化后进行使用
    规则7.3:不要在共享目录中创建临时文件
    建议7.1:在进行文件操作时避免引起竞争条件
8 敏感信息处理
    规则8.1:禁用rand函数产生用于安全用途的伪随机数
    规则8.2:内存中的敏感信息使用完毕后立即清0
    规则8.3:严禁使用string类存储敏感信息
附录A SQL注入相关的特殊字符
附录B 命令注入相关的特殊字符
附录C 危险函数及替换的安全函数列表
附录D 异步安全的函数列表
参考资料
0 前言

标签:

实例下载地址

华为C编码规范

不能下载?内容有错? 点击这里报错 + 投诉 + 提问

好例子网口号:伸出你的我的手 — 分享

网友评论

发表评论

(您的评论需要经过审核才能显示)

查看所有0条评论>>

小贴士

感谢您为本站写下的评论,您的评论对其它用户来说具有重要的参考价值,所以请认真填写。

  • 类似“顶”、“沙发”之类没有营养的文字,对勤劳贡献的楼主来说是令人沮丧的反馈信息。
  • 相信您也不想看到一排文字/表情墙,所以请不要反馈意义不大的重复字符,也请尽量不要纯表情的回复。
  • 提问之前请再仔细看一遍楼主的说明,或许是您遗漏了。
  • 请勿到处挖坑绊人、招贴广告。既占空间让人厌烦,又没人会搭理,于人于己都无利。
;
报警