描述
开 本: 128开纸 张: 胶版纸包 装: 平装-胶订是否套装: 否国际标准书号ISBN: 9787115601049
1.本书详细介绍了代码审计的原理、技术和工具,帮助读者深入了解代码审计的基本概念和方法,为实际应用奠定坚实的基础。
2.本书深入讲解了C/C 安全标准,通过实际案例分析,展示了与标准不兼容和兼容的情况,帮助读者更好地理解和运用安全标准,提高代码质量。
3.本书提供了丰富的C/C 源代码漏洞测试案例,展示了如何发现和修复安全漏洞,帮助读者提高代码安全性,降低潜在风险。
本书旨在介绍代码审计及缺陷剖析的相关知识。本书首先介绍了代码检测技术和代码检测工具;然后讲述了C/C 安全标准,展示了与标准不兼容的案例和兼容的案例,并对案例对应的知识点进行讲解,以帮助开发人员、评测人员理解和运用标准;接着分析了C/C 语言源代码漏洞测试,展示了包含安全漏洞的案例,以及修复安全漏洞的案例;最后介绍了常见运行时缺陷,主要基于C/C 案例代码进行剖析,这些运行时缺陷是在对C/C 项目进行代码检测和代码审计时需要重点关注的。
本书不仅适合开发人员、测试人员阅读,还适合作为相关培训机构的教材。
目 录
第 1章 代码检测和工具 1
1.1 背景 1
1.2 代码审计 1
1.2.1 代码审计的思路 2
1.2.2 代码审计的步骤 2
1.2.3 安全审计的标准 3
1.2.4 代码审计中的常见概念 5
1.3 代码检测工具 5
1.3.1 代码检测工具的原理 6
1.3.2 代码检测技术 7
1.3.3 代码检测的主要方法 9
1.3.4 代码检测工具的主要功能 14
1.3.5 常见的代码检测工具 14
1.3.6 代码检测工具的评价基准 16
1.4 软件成分分析工具 19
1.4.1 软件成分分析工具的
原理 20
1.4.2 软件成分分析工具使用的
关键技术 21
1.4.3 SCA工具技术指标 27
1.5 如何成为一名代码安全检测
工程师 27
1.6 代码安全审计/检测练习靶场 28
第 2章 C语言安全标准(一) 30
2.1 C语言安全标准产生的背景 30
2.2 如何理解和使用GJB 8114标准 30
2.3 C和C 的共用规则 31
2.3.1 声明定义规则 31
2.3.2 版面书写规则 57
2.3.3 指针使用规则 63
2.3.4 分支控制规则 77
2.3.5 跳转控制规则 91
2.3.6 运算处理 93
2.3.7 函数调用 113
第3章 C语言安全标准(二) 127
3.1 关于语句使用的规则 127
3.1.1 关于循环控制的规则 131
3.1.2 关于类型转换的规则 135
3.1.3 关于初始化的规则 141
3.1.4 关于比较判断的规则 146
3.1.5 关于变量使用的规则 152
3.2 C 的专用规则 162
3.2.1 关于类与对象的强制规则 162
3.2.2 关于构造函数的强制规则 169
3.2.3 关于虚函数的强制规则 173
3.2.4 关于类型转换的强制规则 176
3.2.5 关于内存释放的强制规则 177
第4章 C/C 语言源代码漏洞测试
规范 180
4.1 不可控的内存分配 180
4.2 路径错误 181
4.3 数据处理 182
4.3.1 相对路径遍历 182
4.3.2 绝对路径遍历 184
4.3.3 命令行注入 185
4.3.4 SQL注入 186
4.3.5 进程控制 188
4.3.6 缓冲区溢出 189
4.3.7 使用外部控制的格式化
字符串 189
4.3.8 整数溢出 190
4.3.9 信息通过错误消息泄露 191
4.3.10 信息通过服务器日志文件
泄露 192
4.3.11 信息通过调试日志文件
泄露 193
4.3.12 以未检查的输入作为
循环条件 193
4.4 错误的API实现 194
4.5 劣质代码 195
4.6 不充分的封装 196
4.7 安全功能 197
4.7.1 明文存储密码 197
4.7.2 存储可恢复的密码 197
4.7.3 密码硬编码 198
4.7.4 明文传输敏感信息 199
4.7.5 使用已破解或危险的
加密算法 199
4.7.6 可逆的哈希算法 200
4.7.7 密码分组链接模式未使用
随机初始化向量 201
4.7.8 不充分的随机数 202
4.7.9 安全关键的行为依赖反向
域名解析 203
4.7.10 没有要求使用强密码 204
4.7.11 没有对密码域进行掩饰 205
4.7.12 通过用户控制的SQL关键字
绕过授权 206
4.7.13 未使用盐值计算哈希值 207
4.7.14 RSA算法未使用最优
非对称加密填充 208
4.8 Web问题 209
第5章 常见运行时缺陷 211
5.1 缓冲区溢出 211
5.1.1 缓冲区溢出的原理 211
5.1.2 防范缓冲区溢出 216
5.1.3 栈缓冲区溢出 216
5.1.4 缓冲区溢出案例 217
5.2 内存泄漏 223
5.2.1 内存泄漏的原理 223
5.2.2 内存泄漏案例 224
5.3 代码不可达 235
5.4 整数溢出或环绕 236
5.5 资源泄露 237
5.6 线程死锁 238
5.6.1 加锁后未判断是否成功 238
5.6.2 线程死锁 239
5.6.3 加锁后未解锁 240
5.7 无限循环 240
5.7.1 可能不变的循环因子 240
5.7.2 循环跳出条件无法满足 241
5.7.3 函数循环调用 241
5.7.4 控制表达式有逻辑错误 241
5.7.5 以外部输入作为循环
跳出条件 242
评论
还没有评论。