《Web应用安全权威指南》PDF下载

  • 购买积分:13 如何计算积分?
  • 作  者:(日)徳丸浩著
  • 出 版 社:北京:人民邮电出版社
  • 出版年份:2014
  • ISBN:9787115370471
  • 页数:378 页
图书介绍:本书首先简要介绍了Web应用的安全隐患以及产生原因,然后详细介绍了Web安全基础(如HTTP、会话管理、同源策略)以及Web应用的各种安全隐患。最后深入的探讨了如何提高Web网站的安全性和开发安全的Web应用所需要的管理。本书可操作性强,读者可以通过下载已搭建的虚拟机环境亲自体验光书中的各种安全隐患。

第1章 什么是Web应用的安全隐患 1

1.1 安全隐患即“能用于作恶的Bug” 2

1.2 为什么存在安全隐患会有问题 3

经济损失 3

法律要求 3

对用户造成不可逆的伤害 4

欺骗用户 4

被用于构建僵尸网络 4

1.3 产生安全隐患的原因 6

1.4 安全性Bug与安全性功能 7

1.5 本书的结构 8

第2章 搭建试验环境 9

2.1 试验环境概要 10

2.2 安装VMware Player 11

什么是VMware Player 11

下载VMware Player 11

安装VMware Player 12

2.3 安装虚拟机及运行确认 14

虚拟机启动确认 14

虚拟机的使用方法 15

编辑hosts文件 16

使用ping确认连接 16

Apache与PHP的运行确认 17

设置并确认邮箱账号 17

2.4 安装Fiddler 18

什么是Fiddler 18

安装Fiddler 18

Fiddler的运行确认及简单用法 18

参考:虚拟机的数据一览 19

参考:如果无法连接试验环境的POP3服务器 20

第3章 Web安全基础:HTTP、会话管理、同源策略 21

3.1 HTTP与会话管理 22

为什么要学习HTTP 22

最简单的HTTP 22

使用Fiddler观察HTTP消息 23

请求消息 24

响应消息 24

状态行 25

响应头信息 25

如果将HTTP比喻为对话 25

输入-确认-注册模式 26

POST方法 28

消息体 28

百分号编码 29

Referer 29

GET和POST的使用区别 29

hidden参数能够被更改 30

将hidden参数的更改比作对话 32

hidden参数的优点 32

无状态的HTTP认证 33

体验Basic认证 33

专栏 认证与授权 36

Cookie与会话管理 36

使用Cookie的会话管理 39

会话管理的拟人化解说 39

会话ID泄漏的原因 42

Cookie的属性 42

专栏 Cookie Monster Bug 44

总结 45

3.2 被动攻击与同源策略 46

主动攻击与被动攻击 46

主动攻击 46

被动攻击 46

恶意利用正规网站进行的被动攻击 47

跨站被动攻击 48

浏览器如何防御被动攻击 48

沙盒 49

同源策略 49

应用程序安全隐患与被动攻击 52

专栏 第三方JavaScript 53

JavaScript以外的跨域访问 54

frame元素与iframe元素 54

专栏 X-FRAME-OPTIONS 54

img元素 54

script元素 54

CSS 55

form元素的action属性 55

总结 56

第4章 Web应用的各种安全隐患 57

4.1 Web应用的功能与安全隐患的对应关系 58

安全隐患产生于何处 58

注入型隐患 59

总结 60

4.2 输入处理与安全性 61

什么是Web应用的输入处理 61

检验字符编码 62

转换字符编码 62

检验并转换字符编码的实例 62

专栏 字符编码的自动转换与安全性 64

输入校验 64

输入校验的目的 64

输入校验与安全性 65

二进制安全与空字节攻击 65

仅校验输入值并不是安全性策略 66

输入校验的依据是应用程序的规格 67

哪些参数需要校验 67

PHP的正则表达式库 67

使用正则表达式检验输入值的实例(1)1~5个字符的字母数字 68

使用正则表达式检验输入值的实例(2)住址栏 70

专栏 请注意mb_ereg中的\d与\w 70

范例 70

专栏 输入校验与框架 71

总结 72

参考:表示“非控制字符的字符”的正则表达式 73

4.3 页面显示的相关问题 75

4.3.1 跨站脚本(基础篇) 75

概要 75

攻击手段与影响 76

XSS窃取Cookie值 76

通过JavaScript攻击 79

篡改网页 80

反射型XSS与存储型XSS 82

安全隐患的产生原因 84

HTML转义的概要 84

元素内容的XSS 85

没有用引号括起来的属性值的XSS 85

用引号括起来的属性值的XSS 85

对策 86

XSS对策的基础 86

指定响应的字符编码 87

XSS的辅助性对策 88

对策总结 89

参考:使用Perl的对策示例 89

使用Perl进行HTML转义的方法 89

指定响应的字符编码 89

4.3.2 跨站脚本(进阶篇) 90

href属性与src属性的XSS 91

生成URL时的对策 92

校验链接网址 92

JavaScript的动态生成 92

事件绑定函数的XSS 92

script元素的XSS 94

JavaScript字符串字面量动态生成的对策 95

DOM based XSS 97

允许HTML标签或CSS时的对策 99

参考:Perl中转义Unicode的函数 99

4.3.3 错误消息导致的信息泄漏 100

总结 100

继续深入学习 100

4.4 SQL调用相关的安全隐患 101

4.4.1 SQL注入 101

概要 101

攻击手段与影响 102

示例脚本解说 102

错误消息导致的信息泄漏 103

UNION SELECT致使的信息泄漏 104

使用SQL注入绕过认证 104

通过SQL注入攻击篡改数据 106

其他攻击 107

专栏 数据库中表名与列名的调查方法 108

安全隐患的产生原因 109

字符串字面量的问题 109

针对数值的SQL注入攻击 110

对策 110

使用占位符拼接SQL语句 111

专栏 采用MDB2的原因 111

为什么使用占位符会安全 111

参考:LIKE语句与通配符 113

使用占位符的各种处理 114

SQL注入的辅助性对策 116

总结 117

继续深入学习 117

参考:无法使用占位符时的对策 117

参考:Perl+MySQL的安全连接方法 118

参考:PHP+PDO+MySQL的安全连接方法 118

参考:Java+MySQL的安全连接方法 118

4.5 关键处理中引入的安全隐患 120

4.5.1 跨站请求伪造(CSRF) 120

概要 120

攻击手段与影响 121

“输入-执行”模式的CSRF攻击 121

CSRF攻击与XSS攻击 124

存在确认页面时的CSRF攻击 125

专栏 针对内部网络的CSRF攻击 127

安全隐患的产生原因 128

对策 129

筛选出需要防范CSRF攻击的页面 129

确认是正规用户自愿发送的请求 130

专栏 令牌与一次性令牌 131

CSRF的辅助性对策 133

对策总结 133

4.6 不完善的会话管理 134

4.6.1 会话劫持的原因及影响 134

预测会话ID 134

窃取会话ID 134

挟持会话ID 135

会话劫持的方法总结 135

会话劫持的影响 135

4.6.2 会话ID可预测 136

概要 136

攻击手段与影响 136

常见的会话ID生成方法 136

使用推测出的会话ID尝试伪装 137

伪装造成的影响 137

安全隐患的产生原因 137

对策 138

改善PHP的会话ID的随机性的方法 138

参考:自制会话管理机制产生的其他隐患 139

4.6.3 会话ID嵌入URL 139

概要 139

攻击手段与影响 140

会话ID嵌入URL所需的条件 140

范例脚本解说 141

通过Referer泄漏会话ID所需的条件 142

攻击流程 142

事故性的会话ID泄漏 143

影响 144

安全隐患的产生原因 144

对策 144

PHP 144

Java Servlet(J2EE) 145

ASP.NET 145

4.6.4 固定会话ID 145

概要 145

攻击手段与影响 146

示例脚本介绍 146

会话固定攻击解说 148

登录前的会话固定攻击 148

会话采纳 151

仅在Cookie中保存会话ID的网站固定会话ID 151

会话固定攻击的影响 151

安全隐患的产生原因 152

对策 152

无法更改会话ID时采用令牌 153

登录前的会话固定攻击的对策 154

总结 154

4.7 定向相关的安全隐患 155

4.7.1 自由重定向漏洞 155

概要 155

攻击手段与影响 156

安全隐患的产生原因 159

允许自由重定向的情况 159

对策 160

固定重定向的目标URL 160

使用编号指定重定向的目标URL 160

校验重定向的目标域名 160

专栏 警告页面 162

4.7.2 HTTP消息头注入 162

概要 162

攻击手段与影响 163

重定向至外部域名 165

专栏 HTTP响应截断攻击 166

生成任意Cookie 166

显示伪造页面 168

安全隐患的产生原因 170

专栏 HTTP消息头与换行 171

对策 171

对策1:不将外界参数作为HTTP响应消息头输出 171

对策2:执行以下两项内容 171

专栏 PHP的header函数中进行的换行符校验 173

4.7.3 重定向相关的安全隐患总结 173

4.8 Cookie输出相关的安全隐患 174

4.8.1 Cookie的用途不当 174

不该保存在Cookie中的数据 174

参考:最好不要在Cookie中保存数据的原因 174

专栏Padding Oracle攻击与MS10-070 176

4.8.2 Cookie的安全属性设置不完善 176

概要 176

攻击手段与影响 177

关于抓包方法的注意点 180

安全隐患的产生原因 181

什么样的应用程序不能在Cookie中设置安全属性 181

对策 181

给保存会话ID的Cookie设置安全属性的方法 182

使用令牌的对策 182

使用令牌能确保安全性的原因 184

除安全属性外其他属性值需要注意的地方 184

Domain属性 184

Path属性 185

Expires属性 185

HttpOnly属性 185

总结 185

4.9 发送邮件的问题 186

4.9.1 发送邮件的问题概要 186

邮件头注入漏洞 186

使用hidden参数保存收件人信息 186

参考:邮件服务器的开放转发 187

4.9.2 邮件头注入漏洞 187

概要 187

攻击手段与影响 188

攻击方式1:添加收件人 190

攻击方式2:篡改正文 191

通过邮件头注入攻击添加附件 192

安全隐患的产生原因 193

对策 194

使用专门的程序库来发送邮件 194

不将外界传入的参数包含在邮件头中 194

发送邮件时确保外界传入的参数中不包含换行符 195

邮件头注入的辅助性对策 195

总结 196

继续深入学习 196

4.10 文件处理相关的问题 197

4.10.1 目录遍历漏洞 197

概要 197

攻击手段与影响 198

专栏 从脚本源码开始的一连串的信息泄漏 200

安全隐患的产生原因 200

对策 201

避免由外界指定文件名 201

文件名中不允许包含目录名 201

专栏 basename函数与空字节 202

限定文件名中仅包含字母和数字 202

总结 203

4.10.2 内部文件被公开 203

概要 203

攻击手段与影响 203

安全隐患的产生原因 204

对策 205

参考:Apache中隐藏特定文件的方法 205

4.11 调用OS命令引起的安全隐患 206

4.11.1 OS命令注入 206

概要 206

攻击手段与影响 207

调用sendmail命令发送邮件 207

OS命令注入攻击与影响 209

安全隐患的产生原因 210

在Shell中执行多条命令 210

使用了内部调用Shell的函数 211

安全隐患的产生原因总结 212

对策 212

在设计阶段决定对策方针 213

选择不调用OS命令的实现方法 213

避免使用内部调用Shell的函数 213

不将外界输入的字符串传递给命令行参数 216

使用安全的函数对传递给OS命令的参数进行转义 216

OS命令注入攻击的辅助性对策 217

参考:内部调用Shell的函数 218

4.12 文件上传相关的问题 219

4.12.1 文件上传问题的概要 219

针对上传功能的DoS攻击 219

专栏 内存使用量与CPU使用时间等其他需要关注的资源 220

使上传的文件在服务器上作为脚本执行 220

诱使用户下载恶意文件 221

越权下载文件 222

4.12.2 通过上传文件使服务器执行脚本 222

概要 222

攻击手段与影响 223

示例脚本解说 223

专栏 警惕文件名中的XSS 224

PHP脚本的上传与执行 224

安全隐患的产生原因 225

对策 225

专栏 校验扩展名时的注意点 228

4.12.3 文件下载引起的跨站脚本 228

概要 228

攻击手段与影响 229

图像文件引起的XSS 229

PDF下载引起的XSS 231

安全隐患的产生原因 234

内容为图像时 234

内容不为图像时 235

对策 236

文件上传时的对策 236

专栏 BMP格式的注意点与MS07-057 238

文件下载时的对策 238

其他对策 239

专栏 将图像托管在其他域名 240

参考:用户PC中没有安装对应的应用程序时 240

总结 241

4.13 include相关的问题 242

4.13.1 文件包含攻击 242

概要 242

攻击手段与影响 243

文件包含引发的信息泄漏 244

执行脚本1:远程文件包含攻击(RFI) 244

专栏 RFI攻击的变种 245

执行脚本2:恶意使用保存会话信息的文件 246

安全隐患的产生原因 248

对策 248

总结 248

4.14 eval相关的问题 249

4.14.1 eval注入 249

概要 249

攻击手段与影响 250

存在漏洞的应用 250

攻击手段 252

安全隐患的产生原因 253

对策 253

不使用eval 253

避免eval的参数中包含外界传入的参数 254

限制外界传入eval的参数中只包含字母和数字 254

参考:Perl的eval代码块形式 254

总结 255

继续深入学习 255

4.15 共享资源相关的问题 256

4.15.1 竞态条件漏洞 256

概要 256

攻击手段与影响 257

安全隐患的产生原因 258

对策 259

避免使用共享资源 259

使用互斥锁 259

总结 260

参考:Java Servlet的其他注意点 260

第5章 典型安全功能 261

5.1 认证 262

5.1.1 登录功能 262

针对登录功能的攻击 262

通过SQL注入攻击来跳过登录功能 262

通过SQL注入攻击获取用户密码 263

在登录页面进行暴力破解 263

通过社会化攻击得到用户密码 263

通过钓鱼方法获取密码 264

登录功能被破解后的影响 264

如何防止非法登录 264

确保系统中不存在SQL注入等安全性Bug 264

设置难以猜测的密码 265

密码的字符种类和长度要求 265

密码的使用现状 266

应用程序设计中关于密码的需求 266

严格的密码检查原则 267

5.1.2 针对暴力破解攻击的对策 268

初步认识账号锁定 268

暴力破解攻击的检测和对策 268

字典攻击 269

Joe账号检索 269

逆向暴力破解 269

针对变种暴力破解的对策 269

5.1.3 密码保存方法 271

保护密码的必要性 271

利用加密方式进行密码保护及其注意事项 271

专栏 数据库加密和密码保护 272

利用信息摘要来进行密码保护及其注意事项 272

什么是信息摘要 272

专栏 密码学级别的散列函数需要满足的要求 273

利用信息摘要保护密码 273

威胁1:离线暴力破解 274

威胁2:彩虹破解(Rainbow Crack) 275

威胁3:在用户数据库里创建密码字典 276

如何防止散列值被破解 277

对策1:salt(加盐) 277

对策2:stretching(延展计算) 278

实现示例 278

专栏 密码泄露途径 280

5.1.4 自动登录 280

危险的实现方式示例 281

安全的自动登录实现方式 281

延长会话有效期 282

使用令牌实现自动登录 283

基于认证票的自动登录方式 286

三种方法的比较 286

如何降低自动登录带来的风险 286

5.1.5 登录表单 286

专栏 密码确实需要掩码显示吗 287

5.1.6 如何显示错误消息 288

5.1.7 退出登录功能 289

5.1.8 认证功能总结 290

参考:彩虹表原理 290

5.2 账号管理 293

5.2.1 用户注册 293

邮箱地址确认 293

防止用户ID重复 295

例子1:ID相同密码不同可以注册的网站 295

例子2:用户ID没有添加唯一性约束的网站 295

应对自动用户注册 296

利用CAPTCHA防止自动注册 296

5.2.2 修改密码 297

确认当前密码 297

修改密码后向用户发送邮件通知 298

密码修改功能容易发生的漏洞 298

5.2.3 修改邮箱地址 298

修改邮箱地址功能要考虑的安全对策 299

5.2.4 密码找回 299

面向管理员的密码找回功能 300

面向用户的密码找回功能 300

对用户进行身份确认 301

如何发送密码通知 301

5.2.5 账号冻结 302

5.2.6 账号删除 303

5.2.7 账号管理总结 303

5.3 授权 304

5.3.1 什么是授权 304

5.3.2 典型的授权漏洞 304

更改资源ID后可以查看没有权限查看的信息 304

只控制菜单的显示或不显示 305

使用hidden参数或者Cookie保存权限信息 306

授权漏洞总结 307

专栏 将私密信息嵌入URL进行授权处理 307

5.3.3 授权管理的需求设计 307

专栏 什么是角色 308

5.3.4 如何正确实现授权管理 308

5.3.5 总结 309

5.4 日志输出 310

5.4.1 日志输出的目的 310

5.4.2 日志种类 310

错误日志 311

访问日志 311

调试日志 311

5.4.3 有关日志输出的需求 311

需要记录到日志里的所有事件 312

日志里应包括的信息和格式 312

日志文件保护 312

日志文件保存位置 313

日志文件保存期限 313

服务器的时间调整 313

5.4.4 实现日志输出 313

5.4.5 总结 314

第6章 字符编码和安全 315

6.1 字符编码和安全概要 316

6.2 字符集 317

什么是字符集 317

ASCII和ISO-8859-1 317

JIS规定的字符集 318

微软标准字符集 318

Unicode 319

GB2312 319

GBK 319

GB18030 320

不同字符相同编码的问题 320

字符集的处理引起的漏洞 320

6.3 字符编码方式 321

什么是编码方式 321

Shift_JIS 321

EUC-JP 325

ISO-2022-JP 326

UTF-16 326

UTF-8 327

GB2312 329

GBK 330

GB18030 331

6.4 由字符编码引起的漏洞总结 332

字符编码方式中非法数据导致的漏洞 332

对字符编码方式处理存在纰漏导致的漏洞 332

在不同字符集间变换导致的漏洞 332

6.5 如何正确处理字符编码 333

在应用内统一使用的字符集 333

输入非法数据时报错并终止处理 335

处理数据时使用正确的编码方式 335

专栏 调用htmlspecialchars函数时必须指定字符编码方式 336

输出时设置正确的字符编码方式 336

其他对策:尽量避免编码自动检测 337

6.6 总结 338

第7章 如何提高Web网站的安全性 339

7.1 针对Web服务器的攻击途径和防范措施 341

7.1.1 利用基础软件漏洞进行攻击 341

7.1.2 非法登录 341

7.1.3 对策 341

停止运行不需要的软件 342

定期实施漏洞防范措施 342

选定软件时确认软件的升级状况 342

确定打补丁方式 343

关注各种漏洞相关信息 344

确认漏洞后调查补丁状况以及防范对策、并制定对应计划 344

执行漏洞对应计划 345

对不需要对外公开的端口或服务加以访问限制 346

通过端口扫描确认各端口服务状态 347

提高认证强度 348

7.2 防范伪装攻击的对策 349

7.2.1 网络伪装的手段 349

针对DNS服务器的攻击 349

专栏 VISA域名问题 350

ARP欺骗攻击 350

7.2.2 钓鱼攻击 350

7.2.3 Web网站的伪装攻击对策 351

网络层的对策 351

同一网段内不放置可能存在漏洞的服务器 351

强化DNS运维 351

引入SSL/TLS 352

专栏 免费的数字证书 354

使用便于记忆的域名 354

7.3 防范网络监听、篡改的对策 355

7.3.1 网络监听、篡改的途径 355

通过无线网进行监听、篡改 355

利用交换机端口镜像 355

利用代理服务器 355

伪装成DHCP服务器 355

使用ARP欺骗攻击和DNS缓存污染攻击(DNS cache poisoning) 355

7.3.2 中间人攻击 356

使用Fiddler模拟中间人攻击 356

专栏 请不要手动安装证书 358

7.3.3 对策 359

使用SSL时的注意事项 359

专栏 SSL认证标签 360

7.4 防范恶意软件的对策 361

7.4.1 什么是Web网站的恶意软件对策 361

7.4.2 恶意软件的感染途径 361

7.4.3 Web网站恶意软件防范对策概要 362

7.4.4 如何确保服务器不被恶意软件感染 363

探讨是否需要制定针对恶意软件的防范措施 363

制定病毒防范政策并向用户公开 363

使用防病毒软件 364

专栏 Web网站的防病毒对策和Gumblar的关系 365

7.5 总结 366

第8章 开发安全的Web应用所需要的管理 367

8.1 开发管理中的安全对策概要 368

8.2 开发体制 369

开发标准的制定 369

教育培训 369

8.3 开发过程 371

8.3.1 规划阶段的注意事项 371

8.3.2 招标时的注意事项 371

专栏 谁应该对安全漏洞负责 372

8.3.3 需求分析时的注意事项 372

8.3.4概要设计的推进方法 373

8.3.5 详细设计和编码阶段的注意事项 374

8.3.6 安全性测试的重要性及其方法 374

8.3.7 Web健康诊断基准 374

8.3.8 承包方测试 376

8.3.9 发包方测试(验收) 376

8.3.10 运维阶段的注意事项 377

8.4 总结 378