规则1:禁用rand函数产生用于安全用途的伪随机数 C标准库rand()函数生成的是伪随机数,请使用/dev/random生成随机数。 规则2:内存中的敏感信息使用完毕后立即...

规则1:禁用rand函数产生用于安全用途的伪随机数 C标准库rand()函数生成的是伪随机数,请使用/dev/random生成随机数。 规则2:内存中的敏感信息使用完毕后立即...
规则1:创建文件时必须显式指定合适的文件访问权限 创建文件时,如果不显式指定合适访问权限,可能会让未经授权的用户访问该文件。下列代码没有显式配置文件的访问权限。 推荐做法: ...
规则1:禁止外部可控数据作为system、popen、WinExec、ShellExecute、execl, execlp, execle, execv, execvp、Cr...
要正确使用安全函数。 规则1:正确设置安全函数中的destMax参数 安全函数的destMax参数设置应当准确,有效,并满足良好的编码风格要求。 规则2:禁止不正确地重定义或...
规则1:内存申请前,必须对申请内存大小进行合法性校验 内存申请的大小可能来自于外部数据,必须检查其合法性,防止过多地、非法地申请内存。不能申请0长度的内存。 例如: 规则2:...
规则1:整数之间运算时必须严格检查,确保不会出现溢出、反转、除0 在计算机中,整数存储的长度是固定的(例如32位或64位),当整数之间进行运算时,可能会超过这个最大固定长度,...
规则1:确保有足够的存储空间 部分字符串处理函数由于设计时安全考虑不足,或者存在一些隐含的目的缓冲区长度要求,容易被误用,导致缓冲区写溢出。典型函数如itoa,realpat...
规则1:禁用atexit函数 atexit函数注册若干个有限的函数,当exit被调用后,自动调用由atexit事先注册的函数。 当资源不再使用后,编码人员应该立即主动地进行清...
规则1:如果有构造函数,则必须有析构函数 析构函数的目的是为了在类释放的时候做相应的清理工作,以免编码人员忘记资源的清理。 规则2:构造函数内不能做任何有可能失败的操作 构造...
规则1:禁用C++异常机制 严禁使用C++的异常机制,所有的错误都应该通过错误值在函数之间传递并做相应的判断, 而不应该通过异常机制进行错误处理。 编码人员必须完全掌控整个编...
规则1:循环必须有退出条件 循环如果没有退出条件,那么程序无法安全退出。 以下代码,在一个大循环内接收外部数据并进行处理,但没有退出条件,会导致该程序无法正常退出。 例外:1...
规则2:严禁对公共接口API函数的参数进行ASSERT操作 对于设计成API的函数,必须对参数进行合法性判断,严禁在API实现过程中产生CRASH。对API函数的参数进行AS...
规则1:数组作为函数参数时,必须同时将其长度作为函数的参数 通过函数参数传递数组或一块内存进行写操作时,函数参数必须同时传递数组元素个数或所传递的内存块大小,否则函数在使用数...
断言机制 断言是一种除错机制,用于验证代码是否符合编码人员的预期。编码人员在开发期间应该对函数的参数、代码中间执行结果合理地使用断言机制,确保程序的缺陷尽量在测试阶段被发现。...
规则1:指针变量、表示资源描述符的变量、BOOL变量声明必须赋予初值 变量声明赋予初值,可以避免由于编程人员的疏忽导致的变量未初始化引用。示例: 以下代码,由于变量声明未赋予...
编程人员在编程过程中应加强安全意识,建立攻击者思维,养成安全编码的习惯,编写出安全可靠的代码。 1.攻击者思维 编程过程中应该时刻保持以下的假设: 1. 程序所处理的所有外部...
规则1. 不能定义、重定义或取消定义标准库/平台中保留的标识符、宏和函数。 建议1. 不使用与硬件或操作系统关系很大的语句,而使用建议的标准语句,以提高软件的可移植性和可重用...
规则1.避免使用strlen()计算二进制数据的长度。 说明:strlen()函数用于计算字符串的长度,它返回字符串中第一个NULL结束符之前的字符的数量。因此用strlen...
规则1.确保格式字符和参数匹配。 说明:使用格式化字符串应该小心,确保格式字符和参数之间的匹配,保留数量和数据类型。格式字符和参数之间的不匹配会导致未定义的行为。大多数情况下...
C99标准定义了整型提升(integer promotions)、整型转换级别(integer conversion rank)以及普通算术转换(usual arithmet...