Web应用安全权威指南
查字典图书网
当前位置: 查字典 > 图书网 > 互联网> Web应用安全权威指南

Web应用安全权威指南

Web应用安全权威指南

7.5

作者: 德丸浩
出版社: 人民邮电出版社
译者: 赵文  |  刘斌
出版年: 2014-10
页数: 378
定价: 79
装帧: 平装
ISBN: 9787115370471

我要收藏

内容简介:

《web应用安全权威指南》系日本web安全第一人德丸浩所创,是作者从业多年的经验总结。作者首先简要介绍了web应用的安全隐患以及产生原因,然后详细介绍了web安全的基础,如http、会话管理、同源策略等。此外还重点介绍了web应用的各种安全隐患,对其产生原理及对策进行了详尽的讲解。最后对如何提高web网站的安全性和开发安全的web应用所需要的管理进行了深入的探讨。本书可操作性强,读者可以通过下载已搭建的虚拟机环境亲自体验书中的各种安全隐患。

《web应用安全权威指南》适合web相关的开发人员特别是安全及测试人员阅读。

八大章节全面剖析,深入浅出地讲解了sql注入、xss、csrf等web开发人员必知的web安全知识。通过在vmware player虚拟机上对php样本的攻击,详细介绍了安全隐患产生的原理及应对方法,助你打造安全无虞的web应用。

作者简介:

德丸 浩

2008年创立HASH咨询公司,任董事长。主要从事网络安全性的诊断与咨询工作,并在工作之余通过博客普及网络安全知识。兼任KYOCERA Communication Systems股份有限公司技术顾问、独立行政法人信息处理推进机构(IPA)兼职研究员。Twitter ID为@ockeghem。

赵文

程序员,Ruby 语言爱好者。图灵电子书《关于 mruby 的一切》译者。个人博客: http://zhaowen.me

刘斌

程序员,关注于后台开发,Java/Ruby爱好者。个人主页:http://liubin.org

目录:

第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 player11

什么是 vmware player11

下载 vmware player11

安装 vmware player12

2-3 安装虚拟机及运行确认14

虚拟机启动确认14

虚拟机的使用方法15

编辑 hosts文件16

使用 ping确认连接16

apache 与php的运行确认17

设置并确认邮箱账号17

2-4 安装 fiddler18

什么是 fiddler18

安装 fiddler18

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

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

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

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

3-1 http 与会话管理22

为什么要学习 http22

最简单的 http22

使用 fiddler观察http消息23

请求消息24

响应消息24

状态行25

响应头信息25

如果将 http比喻为对话25

输入-确认-注册模式26

post 方法28

消息体28

百分号编码29

referer29

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 bug44

总结45

3-2 被动攻击与同源策略46

主动攻击与被动攻击46

主动攻击46

被动攻击46

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

跨站被动攻击48

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

沙盒49

同源策略49

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

专栏  第三方 javascript53

javascript 以外的跨域访问54

frame 元素与iframe元素54

专栏  x-frame-options54

img 元素54

script 元素54

css55

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与w70

范例70

专栏  输入校验与框架71

总结72

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

4-3 页面显示的相关问题75

4.3.1 跨站脚本(基础篇)75

概要75

攻击手段与影响76

xss 窃取cookie值76

通过 javascript攻击79

篡改网页80

反射型 xss与存储型xss82

安全隐患的产生原因84

html 转义的概要84

元素内容的 xss85

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

用引号括起来的属性值的 xss85

对策86

xss 对策的基础86

指定响应的字符编码87

xss 的辅助性对策88

对策总结89

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

使用 perl进行html转义的方法89

指定响应的字符编码89

4.3.2 跨站脚本(进阶篇)90

href 属性与src属性的xss91

生成 url时的对策.92

校验链接网址92

javascript 的动态生成92

事件绑定函数的 xss92

script 元素的xss94

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

dom based xss97

允许 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

预测会话 id134

窃取会话 id134

挟持会话 id135

会话劫持的方法总结135

会话劫持的影响135

4.6.2 会话 id可预测136

概要136

攻击手段与影响136

常见的会话 id生成方法136

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

伪装造成的影响137

安全隐患的产生原因137

对策138

改善 php的会话id的随机性的方法138

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

4.6.3 会话 id嵌入url139

概要139

攻击手段与影响140

会话 id嵌入url所需的条件140

范例脚本解说141

通过 referer泄漏会话id所需的条件142

攻击流程142

事故性的会话 id泄漏143

影响144

安全隐患的产生原因144

对策144

php144

java servlet(j2ee)145

asp.net145

4.6.4 固定会话 id145

概要145

攻击手段与影响146

示例脚本介绍146

会话固定攻击解说148

登录前的会话固定攻击148

会话采纳151

仅在 cookie中保存会话id的网站固定会话id151

会话固定攻击的影响151

安全隐患的产生原因152

对策152

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

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

总结154

4-7 重定向相关的安全隐患155

4.7.1 自由重定向漏洞155

概要155

攻击手段与影响156

安全隐患的产生原因159

允许自由重定向的情况159

对策160

固定重定向的目标 url160

使用编号指定重定向的目标 url160

校验重定向的目标域名160

专栏  警告页面162

4.7.2 http 消息头注入162

概要162

攻击手段与影响163

重定向至外部域名165

专栏  http 响应截断攻击166

生成任意 cookie166

显示伪造页面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-070176

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

10-4 文件处理相关的问题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

11-4 调用 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

12-4 文件上传相关的问题219

4.12.1 文件上传问题的概要219

针对上传功能的 dos攻击219

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

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

诱使用户下载恶意文件221

越权下载文件222

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

概要222

攻击手段与影响223

示例脚本解说223

专栏  警惕文件名中的 xss224

php 脚本的上传与执行224

安全隐患的产生原因225

对策225

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

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

概要228

攻击手段与影响229

图像文件引起的 xss229

pdf 下载引起的xss231

安全隐患的产生原因234

内容为图像时234

内容不为图像时235

对策236

文件上传时的对策236

专栏  bmp 格式的注意点与ms07-057 238

文件下载时的对策238

其他对策239

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

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

总结241

13-4 include 相关的问题242

4.13.1 文件包含攻击242

概要242

攻击手段与影响243

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

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

专栏  rfi 攻击的变种245

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

安全隐患的产生原因248

对策248

总结248

14-4 eval 相关的问题249

4.14.1 eval 注入249

概要249

攻击手段与影响250

存在漏洞的应用250

攻击手段252

安全隐患的产生原因253

对策253

不使用 eval253

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

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

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

总结255

继续深入学习255

15-4 共享资源相关的问题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注入等安全性bug264

设置难以猜测的密码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-1317

jis 规定的字符集318

微软标准字符集318

unicode319

gb2312319

gbk319

gb18030320

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

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

6-3 字符编码方式321

什么是编码方式321

shift_jis321

euc-jp325

iso-2022-jp326

utf-16326

utf-8327

gb2312329

gbk330

gb18030331

6-4 由字符编码引起的漏洞总结332

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

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

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

6-5 如何正确处理字符编码333

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

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

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

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

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

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

6-6 总结338

如何提高 web网站的安全性 第7章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/tls352

专栏  免费的数字证书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

开发安全的 web应用所需要的管理 第8章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

文章试读:为什么存在安全隐患会有问题,这是个越思考就越深入的课题。接下来,就让我们从几个方面来探讨一下必须杜绝安全隐患的原因。 ◆经济损失 应杜绝安全隐患的原因之一为,假如网站的安全隐患被恶意利用,网站的经营者将会蒙受经济损失。典型的损失为以下几项。 赔偿用户的经济损失 给用户寄送代金券作为补偿时的花销 网站暂停运营造成的机会损失 信誉度下降造成的营业额减少 ...

(查看全部试读)

展开全文
随机来一本书

推荐文章

猜你喜欢

附近的人在看

推荐阅读

拓展阅读

热门标签:
我想说两句
我要写长评
 想读     在读     读过   
评价:
标签(多个标签以“,”分开):