目 录
第1篇 代码审计基础
第1章 代码安全现状 2
1.1 典型漏洞代码案例分析 2
1.2 代码审计的基本思想 5
1.3 代码审计的现状 5
第2章 代码审计概述 7
2.1 代码审计的概念 7
2.2 代码审计对象 7
2.3 代码审计的目的 7
2.4 代码审计的原则 7
2.5 代码审计要素 8
2.6 代码审计的内容 9
2.6.1 认证管理 9
2.6.2 授权管理 11
2.6.3 输入/输出验证 11
2.6.4 密码管理 12
2.6.5 调试和接口 12
2.6.6 会话管理 13
2.7 代码审计的成果 13
2.8 代码审计的价值与意义 14
2.9 代码审计的发展趋势 14
第3章 代码审计与漏洞验证相关工具 15
3.1 常用代码编辑器 15
3.2 常用代码审计工具 18
3.3 常用漏洞验证工具 23
第4章 代码审计方法 28
4.1 自上而下 28
4.1.1 通读代码的技巧 28
4.1.2 应用案例 30
4.2 自下而上 39
4.3 利用功能点定向审计 42
4.4 优先审计框架安全 44
4.5 逻辑覆盖 45
4.5.1 白盒测试 45
4.5.2 逻辑覆盖法 47
4.6 代码审计方法综合应用示例 54
第5章 代码审计技术 56
5.1 词法分析 56
5.2 语法分析 59
5.3 基于抽象语法树的语义分析 59
5.4 控制流分析 63
5.5 数据流分析 65
5.6 规则检查分析 66
小结 67
参考资料 68
第2篇 代码审计规范
第6章 代码审计规范解读 72
6.1 代码审计说明 72
6.2 常用术语 72
6.3 代码审计的时机 73
6.4 代码审计方法 73
6.5 代码审计流程 74
6.6 代码审计报告 76
第7章 代码审计指标 78
7.1 安全功能缺陷审计指标 78
7.1.1 数据清洗 78
7.1.2 数据加密与保护 86
7.1.3 访问控制 88
7.1.4 日志安全 92
7.2 代码实现缺陷审计指标 92
7.2.1 面向对象程序安全 92
7.2.2 并发程序安全 95
7.2.3 函数调用安全 97
7.2.4 异常处理安全 100
7.2.5 指针安全 101
7.2.6 代码生成安全 103
7.3 资源使用缺陷审计指标 103
7.3.1 资源管理 103
7.3.2 内存管理 106
7.3.3 数据库使用 110
7.3.4 文件管理 110
7.3.5 网络传输 111
7.4 环境安全缺陷审计指标 113
小结 113
参考资料 114
第3篇 代码安全审计参考规范
第8章 国际代码安全开发参考规范 116
8.1 CVE 116
8.1.1 CVE概述 116
8.1.2 CVE的产生背景 116
8.1.3 CVE的特点 116
8.1.4 CVE条目举例 117
8.2 OWASP 118
8.2.1 OWASP概述 118
8.2.2 OWASP Top 10 118
8.2.3 OWASP安全测试指导方案 139
8.2.4 OWASP安全计划指导方案 140
8.2.5 OWASP应用程序管理方案 141
8.3 CWE 143
第9章 国内源代码漏洞测试规范 165
9.1 软件测试 165
9.2 《Java语言源代码漏洞测试规范》解读 171
9.2.1 适用范围 171
9.2.2 术语和定义 171
9.2.3 Java源代码漏洞测试总则 174
9.2.4 Java源代码漏洞测试工具 178
9.2.5 Java源代码漏洞测试文档 179
9.2.6 Java源代码漏洞测试内容 183
9.3 《C/C++语言源代码漏洞测试规范》解读 229
9.3.1 适用范围 230
9.3.2 术语和定义 230
9.3.3 C/C++源代码漏洞测试总则 232
9.3.4 C/C++源代码漏洞测试工具 236
9.3.5 C/C++源代码漏洞测试文档 236
9.3.6 C/C++源代码漏洞测试内容 236
9.4 《C#语言源代码漏洞测试规范》解读 272
9.4.1 适用范围 273
9.4.2 术语和定义 273
9.4.3 C#源代码漏洞测试总则 276
9.4.4 C#源代码漏洞测试工具 279
9.4.5 C#源代码漏洞测试文档 280
9.4.6 C#源代码漏洞测试内容 280
小结 329
参考资料 330
第4篇 实际开发中的常见漏洞分析
第10章 实际开发中常见的Java源代码漏洞分析 334
10.1 SQL注入 334
10.2 跨站脚本攻击 341
10.3 命令注入 347
10.4 密码硬编码 351
10.5 隐私泄露 353
10.6 Header Manipulation 356
10.7 日志伪造 358
10.8 单例成员字段 361
第11章 实际开发中常见的C/C++源代码漏洞分析 364
11.1 二次释放 364
11.2 错误的内存释放对象 366
11.3 返回栈地址 367
11.4 返回值未初始化 369
11.5 内存泄漏 370
11.6 资源未释放 371
11.7 函数地址使用不当 372
11.8 解引用未初始化的指针 374
小结 375
参考资料 375
英文缩略语 377