第一部分 代码审计前的准备 2
第1章 代码审计环境搭建 2
1.1 wamp/wnmp环境搭建 2
1.2 lamp/lnmp环境搭建 4
1.3 PHP核心配置详解 6
第2章 审计辅助与漏洞验证工具 14
2.1 代码编辑器 14
2.1.1 Notepad++ 15
2.1.2 UltraEdit 15
2.1.3 Zend Studio 19
2.2 代码审计工具 21
2.2.1 Seay源代码审计系统 21
2.2.2 Fortify SCA 24
2.2.3 RIPS 25
2.3 漏洞验证辅助 27
2.3.1 Burp Suite 27
2.3.2 浏览器扩展 32
2.3.3 编码转换及加解密工具 36
2.3.4 正则调试工具 38
2.3.5 SQL执行监控工具 40
第二部分 漏洞发现与防范 46
第3章 通用代码审计思路 46
3.1 敏感函数回溯参数过程 46
3.2 通读全文代码 50
3.3 根据功能点定向审计 64
第4章 漏洞挖掘与防范(基础篇) 68
4.1 SQL注入漏洞 68
4.1.1 挖掘经验 69
4.1.2 漏洞防范 74
4.2 XSS漏洞 77
4.2.1 挖掘经验 77
4.2.2 漏洞防范 82
4.3 CSRF漏洞 83
4.3.1 挖掘经验 83
4.3.2 漏洞防范 85
第5章 漏洞挖掘与防范(进阶篇) 88
5.1 文件操作漏洞 88
5.1.1 文件包含漏洞 88
5.1.2 文件读取(下载)漏洞 93
5.1.3 文件上传漏洞 95
5.1.4 文件删除漏洞 99
5.1.5 文件操作漏洞防范 100
5.2 代码执行漏洞 102
5.2.1 挖掘经验 102
5.2.2 漏洞防范 108
5.3 命令执行漏洞 108
5.3.1 挖掘经验 109
5.3.2 漏洞防范 112
第6章 漏洞挖掘与防范(深入篇) 114
6.1 变量覆盖漏洞 114
6.1.1 挖掘经验 115
6.1.2 漏洞防范 121
6.2 逻辑处理漏洞 122
6.2.1 挖掘经验 122
6.2.2 漏洞防范 130
6.3 会话认证漏洞 131
6.3.1 挖掘经验 131
6.3.2 漏洞防范 135
第7章 二次漏洞审计 136
7.1 什么是二次漏洞 136
7.2 二次漏洞审计技巧 137
7.3 dedecms二次注入漏洞分析 137
第8章 代码审计小技巧 142
8.1 钻GPC等转义的空子 142
8.1.1 不受GPC保护的$_SERVER变量 142
8.1.2 编码转换问题 143
8.2 神奇的字符串 146
8.2.1 字符处理函数报错信息泄露 146
8.2.2 字符串截断 148
8.3 php:∥输入输出流 150
8.4 PHP代码解析标签 153
8.5 fuzz漏洞发现 154
8.6 不严谨的正则表达式 156
8.7 十余种MySQL报错注入 157
8.8 Windows FindFirstFile利用 161
8.9 PHP可变变量 162
第三部分 PHP安全编程规范 166
第9章 参数的安全过滤 166
9.1 第三方过滤函数与类 166
9.1.1 discuz SQL安全过滤类分析 167
9.1.2 discuz xss标签过滤函数分析 173
9.2 内置过滤函数 175
第10章 使用安全的加密算法 177
10.1 对称加密 177
10.1.1 3DES加密 178
10.1.2 AES加密 180
10.2 非对称加密 183
10.3 单向加密 185
第11章 业务功能安全设计 187
11.1 验证码 187
11.1.1 验证码绕过 187
11.1.2 验证码资源滥用 191
11.2 用户登录 192
11.2.1 撞库漏洞 192
11.2.2 API登录 193
11.3 用户注册 194
11.4 密码找回 195
11.5 资料查看与修改 197
11.6 投票/积分/抽奖 198
11.7 充值支付 200
11.8 私信及反馈 200
11.9 远程地址访问 202
11.10 文件管理 204
11.11 数据库管理 205
11.12 命令/代码执行 206
11.13 文件/数据库备份 207
11.14 API 208
第12章 应用安全体系建设 211
12.1 用户密码安全策略 211
12.2 前后台用户分表 213
12.3 后台地址隐藏 215
12.4 密码加密存储方式 216
12.5 登录限制 218
12.6 API站库分离 218
12.7 慎用第三方服务 219
12.8 严格的权限控制 220
12.9 敏感操作多因素验证 221
12.10 应用自身的安全中心 223
参考资源 227