-
字符串操作安全
字符串操作不当会导致字符串缓存区被恶意代码和数据覆盖破坏,进而引发拒绝服务攻击(合法用户无法正常使用)以及执行任意代码,比如绕过验证。 -
格式化函数
a) 格式化操作常见的问题包括格式化参数类型不匹配、参数数目不匹配、格式化字符串长度没有限制、以及字符串的全部或者部分由用户输入;
b) 格式化函数使用不当会导致程序由于未定义行为而异常终止(拒绝服务),甚至执行任意代码(查看栈内容、改写内存、执行任意代码)。 -
整数操作安全
a) 整数操作不当的常见场景包括有/无符号整数运算溢出、整形转换时出现数据截断、以及对有符号整数使用为操作符运算
b) 整数操作不当会导致内存分配出错(分配过大内存或0内存)、以及执行任意代码(整数溢出可导致内存破坏)
c) 有符号整数溢出的结果是不确定的,无符号整数溢出会出现反转环绕,即对比(类型最大值+1)取模
d) 使用整数要多校验数值的合法性 -
内存(堆)管理安全
a) 常见的危险的堆操作包括内存拷贝/分配时未检验合理性、引用空指针/野指针/未定义指针/已释放内存的指针、使用不匹配的内存管理操作、重复释放、使用有隐患的函数比如realloc和alloca等;
b) 内存管理使用不当会导致拒绝服务攻击(比如程序崩溃)、执行任意代码(溢出越界)等 -
文件操作安全
a) 常见的文件操作问题包括文件操作返回值判断有误(通常用int而不是char之类的)、文件创建时没有指定合适的文件权限(比如为防止其他进程访问重要文件,需要以独占方式打开)、对文
C/C++安全编程要点
最新推荐文章于 2022-11-26 11:21:28 发布
![](https://img-home.csdnimg.cn/images/20240711042549.png)