第1章 PHP网页的安全性 1
1.1 什么是安全性 2
1.1.1 黑客攻击的方式 2
1.1.2 PHP网页的安全性问题 3
1.2 RegisterGlobals 4
1.3 安全模式 7
1.3.1 限制文件的存取 8
1.3.2 限制环境变量的存取 8
1.3.3 限制外部程序的执行 9
1.4 MagicQuotes 9
1.4.1 使用MagicQuotes的好处 10
1.4.2 使用MagicQuotes的坏处 10
1.4.3 取消MagicQuotes功能 11
1.5 修改PHP的设定值 11
1.5.1 在php.ini文件中修改设定值 12
1.5.2 在httpd.conf文件中修改设定值 13
1.5.3 在.htaccess文件中修改设定值 13
1.5.4 在程序中修改设定值 13
第2章 Command Injection-命令注入攻击 15
2.1 PHP的命令执行函数 16
2.1.1 System函数 16
2.1.2 Exec函数 17
2.1.3 passthru函数 18
2.1.4 shellexec函数 18
2.1.5 运算符 19
2.2 命令注入攻击 19
2.2.1 攻击实例一 19
2.2.2 攻击实例二 20
2.2.3 攻击实例三 21
2.2.4 命令注入的方式 21
2.3 eval注入攻击 22
2.3.1 攻击没有作用 23
2.3.2 可变变量 24
2.3.3 prereplace函数 24
2.3.4 ace函数 26
2.3.5 动态函数 27
2.3.6 calluserfiunc函数 29
2.4 防范的方法 30
2.4.1 使用escapeshellarg函数来处理命令的参数 30
2.4.2 使用safemodeexecdir指定的可执行文件的路径 32
第3章 ScriptInsertion-客户端脚本植入攻击 33
3.1 客户端脚本植入攻击 34
3.2 攻击实例:在留言板中插入脚本 35
3.2.1 开始攻击:显示简单的对话框 37
3.2.2 没有显示对话框 38
3.2.3 打开InternetExplorer的活动脚本功能 39
3.2.4 关闭PHP的magic_quotes_gpc 40
3.2.5 利用数据库来攻击 41
3.2.6 本章的数据库 42
3.2.7 浏览植入脚本的留言 44
3.2.8 破坏性的攻击手法:显示无穷尽的新窗口 45
3.2.9 引诱性的攻击手法:跳转网址 46
3.3 防范的方法 48
3.3.1 HTML输出过滤 48
3.3.2 使用stip_tags函数来进行HTML输出过滤 48
3.3.3 stip_tags函数的缺点 50
3.3.4 使用htmlspecialchars函数来进行HTML输出过滤 52
第4章 XSS-跨网站脚本攻击 53
4.1 什么是“跨网站脚本攻击” 56
4.2 跨网站脚本攻击 58
4.2.1 本章的数据库 60
4.2.2 登录首页 61
4.2.3 如何攻击 62
4.2.4 开始攻击 62
4.2.5 没有显示对话框 64
4.2.6 如何取得目标用户的cookie内容 64
4.2.7 服务器的记录文件 67
4.3 防范的方法 67
4.4 隐藏在$_SERVER["PHP_SELF"]变量内的脚本 70
4.4.1 实际范例 71
4.4.2 拆解<form>标签的内容 73
4.4.3 避免$_SERVER["PHP_SELF"]被篡改 74
第5章 SQLInjection-SQL注入攻击 77
5.1 SQL注入攻击 78
5.2 攻击实例:绕过账号、密码的检查 79
5.2.1 如何攻击 81
5.2.2 开始攻击 82
5.2.3 只填入账号 84
5.3 攻击实例:删除数据库的所有记录 84
5.3.1 删除留言的记录 86
5.3.2 如何攻击 87
5.3.3 开始攻击 88
5.4 攻击实例:盗取密码 89
5.4.1 如何攻击 91
5.4.2 开始攻击 91
5.5 防范的方法 93
5.5.1 数字型变量的过滤方式 93
5.5.2 字符串变量的过滤方式:使用addslashes函数 94
第6章 CSRF-跨网站请求伪造攻击 97
6.1 跨网站请求伪造攻击 98
6.2 攻击实例:删除数据库的一条记录 99
6.2.1 删除留言的记录 101
6.2.2 如何攻击 102
6.2.3 开始攻击 103
6.3 攻击实例:新增数据库的一条记录 104
6.3.1 如何攻击 105
6.3.2 开始攻击 106
6.4 防范的方法 107
6.4.1 检查网页的来源 108
6.4.2 检查内置的隐藏变量 111
6.4.3 使用POST,不要使用GET 113
第7章 SessionHijacking-会话劫持攻击 115
7.1 什么是Session 116
7.1.1 sessionid 116
7.1.2 Session的名称 118
7.2 PHP的Session机制 119
7.2.1 URL参数 119
7.2.2 表单中隐藏属性的文本框 120
7.2.3 Cookie 121
7.3 会话劫持攻击 123
7.3.1 攻击的步骤 124
7.3.2 如何攻击 124
7.3.3 开始攻击 127
7.4 Session固定攻击 129
7.4.1 攻击的步骤 130
7.4.2 攻击的方式 131
7.5 防范的方法 132
7.5.1 定期更改sessionid 132
7.5.2 更改Session的名称 133
7.5.3 关闭透明化sessionid的功能 133
7.5.4 只从cookie检查sessionid 134
7.5.5 检查浏览器是否改变 134
7.5.6 使用URL传递秘密参数 135
第8章 HTTPResponseSplitting-HTTP响应拆分攻击 137
8.1 HTTP简介 138
8.1.1 HTTP请求的格式 138
8.1.2 HTTP请求的方法 139
8.1.3 HTTP响应的格式 139
8.1.4 使用header函数发送HTTP表头 143
8.1.5 使用PHP的函数来替代Telnet 143
8.2 HTTP响应拆分攻击 144
8.3 攻击实例:跳转地址 149
8.4 与Session固定结合攻击 150
8.5 防范的方法 150
8.5.1 将session.useonly_cookies设置为1 152
8.5.2 使用最新版的PHP 152
8.6 隐藏HTTP响应表头 152
第9章 FileUploadAttack-文件上传攻击 155
9.1 文件上传 156
9.1.1 上传文件的大小 157
9.1.2 $FILES数组变量 158
9.1.3 存放上传文件的文件夹 159
9.1.4 上传文件时的错误信息 159
9.2 文件上传攻击 159
9.2.1 上传可执行文件 160
9.2.2 覆盖原有文件 162
9.2.3 瘫痪网站 162
9.2.4 存取上传的文件数据 162
9.3 防范的方法 162
9.3.1 关掉上传文件的功能 163
9.3.2 限制允许上传的文件大小 163
9.3.3 检查是否真的是上传的文件 164
9.3.4 更改临时文件夹的路径 166
9.3.5 读取上传文件的绝对路径与文件名称 167
9.3.6 隐藏文件的路径 168
第10章 目录/文件攻击 169
10.1 目录穿越攻击 170
10.1.1 如何攻击 170
10.1.2 开始攻击 171
10.1.3 Microsoft的IIS服务器 173
10.2 远程文件引入攻击 173
10.2.1 如何攻击 174
10.2.2 开始攻击 174
10.2.3 与目录穿越结合攻击 175
10.2.4 与HTTP响应分割结合攻击 177
10.3 防范的方法 179
10.3.1 使用者输入的文件名 179
10.3.2 设置openbasedir 181
10.3.3 设置allowurlfopen为Off 182
10.3.4 使用realpath与basename函数来处理文件名 182
第11章 其他的攻击 183
11.1 变量指定攻击 184
11.2 URL攻击 187
11.2.1 开始攻击 187
11.2.2 防范的方法 188
11.3 表单欺骗攻击 189
11.4 HTTP请求欺骗攻击 191
11.5 拒绝服务攻击 193
11.5.1 SYNFlood攻击 194
11.5.2 LAND攻击 195
11.5.3 PingofDeath攻击 195
11.5.4 PingFlood攻击 195
11.5.5 Teardrop攻击 195
11.5.6 Pear-to-pear攻击 196
11.5.7 分布式拒绝服务攻击 196
11.5.8 防范的方法 196
11.5.9 SYNCookies 197
11.5.10 防火墙 197
11.5.11 分享器与路由器 197
11.5.12 应用程序前端硬件 197
11.6 网页劫持攻击 198
11.7 缓冲区溢位攻击 198
11.7.1 基本范例 199
11.7.2 堆栈溢出 199
第12章 攻击手法汇总 201
12.1 命令注入攻击 202
12.1.1 程序代码漏洞1 202
12.1.2 攻击手法1 202
12.1.3 程序代码漏洞2. 203
12.1.4 攻击手法2. 203
12.1.5 命令注入的方式 203
12.1.6 防范的方法 204
12.2 eval注入攻击 204
12.2.1 程序代码漏洞1 204
12.2.2 攻击手法 205
12.2.3 程序代码漏洞2 205
12.2.4 攻击手法 205
12.2.5 程序代码漏洞3 206
12.2.6 攻击手法 206
12.2.7 程序代码漏洞4 206
12.2.8 攻击手法 206
12.2.9 防范的方法 207
12.3 客户端脚本注入攻击 207
12.3.1 程序代码漏洞1 207
12.3.2 攻击手法 207
12.3.3 程序代码漏洞2 207
12.3.4 攻击手法 208
12.3.5 防范的方法 208
12.4 跨网站脚本攻击 208
12.4.1 程序代码漏洞1 209
12.4.2 攻击手法 209
12.4.3 程序代码漏洞2 209
12.4.4 攻击手法 209
12.4.5 防范的方法 209
12.5 SQL注入攻击 210
12.5.1 程序代码漏洞1 210
12.5.2 攻击手法 211
12.5.3 程序代码漏洞2 211
12.5.4 攻击手法 211
12.5.5 程序代码漏洞3 211
12.5.6 攻击手法 212
12.5.7 防范的方法 212
12.6 跨网站请求伪造攻击 213
12.6.1 程序代码漏洞1 213
12.6.2 攻击手法 214
12.6.3 程序代码漏洞2 214
12.6.4 攻击手法 214
12.6.5 防范的方法 215
12.7 Session劫持攻击 216
12.7.1 程序代码漏洞 216
12.7.2 攻击手法 217
12.7.3 防范的方法 217
12.8 Session固定攻击 218
12.8.1 程序代码漏洞 218
12.8.2 攻击手法 218
12.8.3 防范的方法 219
12.9 HTTP响应拆分攻击 221
12.9.1 程序代码漏洞1 221
12.9.2 攻击手法 221
12.9.3 程序代码漏洞2. 222
12.9.4 攻击手法 222
12.9.5 防范的方法 222
12.10 文件上传攻击 223
12.10.1 程序代码漏洞 223
12.10.2 攻击手法 224
12.10.3 防范的方法 224
12.11 目录穿越攻击 225
12.11.1 程序代码漏洞 225
12.11.2 攻击手法 226
12.11.3 防范的方法 226
12.12 远程文件引入攻击 226
12.12.1 程序代码漏洞 227
12.12.2 攻击手法1 227
12.12.3 攻击手法2 227
12.12.4 防范的方法 227
12.13 变量指定攻击 228
12.13.1 程序代码漏洞 228
12.13.2 攻击手法 228
12.13.3 防范的方法 229
第13章 漏洞扫描器 231
13.1 什么是“漏洞扫描器” 232
13.2 Nessus漏洞扫描器 232
13.2.1 Nessus的特点 233
13.2.2 下载与安装 233
13.2.3 执行Nessus 234
13.2.4 Nessus检查漏洞的方式 237
13.3 MaxPatrol漏洞扫描器 238
13.4 Paros漏洞扫描器 240
13.4.1 Paros的特点 240
13.4.2 下载与安装 241
13.4.3 设置浏览器的Proxy 241
13.4.4 执行Paros 243
13.4.5 扫描漏洞 244
13.4.6 检视HTTP请求与响应的内容 245
13.4.7 Paros的Trap功能 245
13.4.8 URL编码与解码 246
第14章 开发安全的Web程序 247
14.1 什么是“安全的Web应用程序” 248
14.2 过滤输入的数据 248
14.2.1 为什么要过滤数据 249
14.2.2 基本的数据过滤程序 251
14.2.3 数字数据的过滤 252
14.2.4 字符串数据的过滤 253
14.2.5 HTML与PHP标签的过滤 254
14.2.6 文件路径的过滤 255
14.2.7 序列化字符串的过滤 256
14.3 转义输出的数据 257
14.3.1 基本的转义程序 257
14.3.2 转义SQL表达式的字符串 258
14.3.3 使用addslashes函数 258
14.4 RegisterGlobals 259
14.4.1 隐藏RegisterGlobals所发生的问题 260
14.4.2 $_REQUEST变量 261
14.4.3 $SERVER变量 261
14.5 magicquotes_gpc 261
14.6 错误信息的报告 262
14.7 文件的安全 263
14.8 Session的安全 264
14.8.1 Session固定攻击 264
14.8.2 Session的保存 265
14.9 虚拟主机 266
14.9.1 可预测的临时文件名称 266
14.9.2 隐藏表头的信息 267
14.9.3 系统异常的监测 267
附录A Telnet使用说明 269
A.l Telnet简介 270
A.2 打开Windows的Telnet服务 270
A.3 Telnet使用说明 272
A.4 使用Telnet连接到本地主机 273
A.5 在HTTP表头内加上要执行的文件 275
附录B 查看HTTP请求与响应的实际内容 277
B.1 如何查看HTTP请求与响应的实际内容 280
B.2 修改HTTP请求/响应的内容 281
B.3 显示HTTP请求/响应的参数 282
B.4 显示上传文件的HTTP请求 283
附录C URL编码与解码 285
附录D 构建PHP的测试环境 285
D.1 AppServ整合包 288
D.2 安装AppServ整合包 289
D.3 测试AppServ是否正确安装 293
D.4 服务器的文件夹位置 293
附录E 找出网站的IP地址 285
E.1 使用Ping命令 296
E.2 使用NetInfo 296
E.3 无法找出IP地址 297