国际知名网络安全专家亲笔撰写,全面揭示Web应用常见安全漏洞及应对策略。 ? 从浏览器安全和站点安全的角度,全面、系统解读黑客攻击和漏洞利用的技术细节和方法,以及防御这些攻击的方式。
《Web应用漏洞侦测与防御:揭秘鲜为人知的攻击手段和防御技术》作者是国际知名网络安全专家,揭示最危险的Web攻击,以及解决方案。全面讲解如何预防常见的网络攻击,包括:HTML注入及跨站脚本攻击、跨站请求伪造攻击、SQL注入攻击及数据存储操纵、攻破身份认证模式、利用设计缺陷、利用平台弱点、攻击浏览器和隐私等。书中对HTML5标准中与安全相关的主要API和特性进行了介绍,针对每一种攻击方式,不仅探究其攻击方法、机理及影响,而且还给出可能采取的应对措施。有助于读者了解如何对Web应用从多角度实施安全保护,做到防患于未然,使得网站拥有者或网站开发人员有信心面对安全相关的威胁与挑战。
第1章 Chapter 1
HTML5
本章内容
HTML5的新增特性
使用及滥用HTML5的安全性考虑
书面语言的历史至少可以追溯到5000年前,当时的苏美尔人使用楔形文字来记录账簿、法律以及清单,这种原始的石刻标记语言为现代的超文本标记语言(HTML)开辟了道路。类似维基百科这样的网站,不就是收集了拜占庭法律、《吸血鬼猎人巴菲》剧集列表、《星际迷航》中的外星人名单等内容吗?由此可见,人类喜欢使用书面语言来记录各种信息。
很大程度上,HTML是基于多种事实上的实现发展起来的标准。很少有浏览器定义HTML是什么,这意味着HTML标准在一定程度上体现了真实世界。如果你根据规范来书写网页,那么浏览器将会按照你的期望来适当地渲染它。在早期的演化发展过程中,标准的缺点是当时的页面并不统一,不同的浏览器有着不同的怪异(quirk)模式,导致产生类似如下的脚注:“建议使用IE 4浏览本网页”、“建议使用Mosaic浏览本网页”。这些怪异模式成为了开发人员的噩梦,导致出现不良设计模式(例如常见的通过用户代理嗅探来侦测性能而不是通过特性测试)或过度依赖于插件(例如Shockwave)。标准中还包含一些很少使用的标签(<acronym>)、糟糕的UI设计(<frame>和<frameset>)或非常令人厌恶的标签(<bgsound>和<marquee>)。HTML2试图澄清某些差异,于1995年11月成为标准。HTML3未能与HTML2合并为可接受的标准。HTML4于1999年12月提出。
8年之后,HTML5作为公共草案出现,过了一年左右才大受欢迎。现如今,在HTML4出现12年之后,标准的最新版本正准备从草案状态变为正式状态。在这12年间,网络逐渐成为人们日常生活中无所不在的组成部分,从第一条包含网站URL的电视广告到数十亿美元的IPO,再到伴随技术或文化的变迁带来的类似欺诈或犯罪这样的黑暗面。
当前的浏览器对HTML5的支持程度多种多样。很多网站以这样或那样的方式使用HTML5。本章所介绍的标准仍然是正在使用的草案,尽管如此,大多数细节都已经足够确定,最多只有JavaScript API或标头(header)发生细微的变化。主要的安全原则仍然是适用的。
HTML5中包含了Web开发人员从他们最喜爱的浏览器中带来的事实标准映射到HTML5标准之中,但更重要的是,标准的制定者在历史实现与优化架构的规范之间进行了认真地考虑。HTML5最引人注目的特点就是对如何解析HTML文档进行了明确描述。最明显的是,各浏览器的实现并不一致,使得针对HTML和JavaScript的攻击可以围绕这些怪异模式下手乃至利用它们。我们将会在后续章节中介绍这些怪异模式带来的安全问题,尤其是第2章。
本章将介绍HTML5及其相关标准的新概念、关注点和考虑等。那些希望针对这些标准的设计找出快速攻击方法或细微漏洞的人会感到失望。由浏览器开发人员、网站开发人员以及安全性测试人员等人所组成的安全生态圈已经对HTML5给予了仔细的关注。通过对HTML4和HTML5的比较可以发现,在HTML4标准中,安全性(security)和隐私(privacy)这两个词分别出现了14次和1次,而在HTML5当前的草案中则分别出现了73次和12次。尽管更多次数地提及并不能够说明一定就会更加安全,但是至少体现出在标准的发展过程中,安全和隐私已经得到更多关注,变得更加重要。
新的标准并未解决浏览器可能面对的所有的安全问题,它所做的是减少之前的标准中不明确的做法、提供更多关于安全实践的指导、建立更严格的HTML解析规则、在不弱化浏览器的前提下引入新特性。新标准带来的好处是更好的浏览体验,缺点是浏览器竞相增加对新特性的支持以及网站开发人员接纳它们的过程中在实现中带来的错误和bug。
……
译者序
前 言
第1章 HTML5
1.1 新的文档对象模型
1.2 跨域资源共享
1.3 Websocket
1.3.1 传输数据
1.3.2 数据帧
1.3.3 安全性考虑
1.4 Web存储
1.5 Web Worker
1.6 杂七杂八
1.6.1 History API
1.6.2 API草案
1.7 小结
第2章 HTML注入及跨站脚本攻击
2.1 理解HTML注入
2.1.1 确定注入点
2.1.2 确定反射类型
2.1.3 确定注入呈现位置的上下文
2.1.4 攻击汇总
2.1.5 利用字符集
2.1.6 利用失效模式
2.1.7 绕过弱的排除列表
2.1.8 利用浏览器的怪异模式
2.1.9 不寻常的攻击载体
2.1.10 XSS的影响
2.2 部署应对措施
2.2.1 确定静态字符集
2.2.2 规范化字符集及编码
2.2.3 对输出进行编码
2.2.4 当心排除列表和正则表达式
2.2.5 重用代码,不要重新实现代码
2.2.6 JavaScript沙盒
2.2.7 浏览器内置XSS防御
2.3 小结
第3章 跨站请求伪造
3.1 理解跨站请求伪造
3.1.1 CSRF实现机制
3.1.2 借助强制浏览的请求伪造
3.1.3 无需密码攻击已认证动作
3.1.4 危险关系:CSRF和HTML注入
3.1.5 当心错综复杂的Web
3.1.6 相关主题:点击劫持
3.2 部署应对措施
3.2.1 朝着正确方向努力
3.2.2 保卫Web浏览器
3.2.3 脆弱性和似真性
3.3 小结
第4章 SQL注入攻击及数据存储操纵
4.1 理解SQL注入
4.1.1 攻击路线:数学和语法
4.1.2 攻击SQL语句
4.1.3 剖析数据库
4.1.4 其他攻击向量
4.1.5 真实世界中的SQL注入攻击
4.1.6 HTML5的Web存储API
4.1.7 不使用SQL的SQL注入攻击
4.2 部署应对措施
4.2.1 验证输入
4.2.2 对语句进行保护
4.2.3 保护信息
4.2.4 给数据库打最新的补丁
4.3 小结
第5章 攻破身份认证模式
5.1 理解身份认证攻击
5.1.1 重放会话令牌
5.1.2 暴力破解
5.1.3 网络嗅探
5.1.4 重置密码
5.1.5 跨站脚本攻击
5.1.6 SQL注入
5.1.7 诈骗和易受骗性
5.2 部署应对措施
5.2.1 保护会话cookie
5.2.2 使用安全认证方案
5.2.3 借助用户的力量
5.2.4 骚扰用户
5.2.5 请求限制
5.2.6 日志与三角测量
5.2.7 击败钓鱼攻击
5.2.8 保护密码
5.3 小结
第6章 利用设计缺陷
6.1 理解逻辑攻击和设计攻击
6.1.1 利用工作流
6.1.2 漏洞利用的策略及做法
6.1.3 归纳法
6.1.4 拒绝服务
6.1.5 不安全的设计模式
6.1.6 加密中的实现错误
6.1.7 信息泄露
6.2 部署应对措施
6.2.1 记录需求
6.2.2 创建强健的测试用例
6.2.3 把策略映射到控制
6.2.4 防御性编程
6.2.5 验证客户端
6.2.6 加密指南
6.3 小结
第7章 利用平台弱点
7.1 攻击是如何实现的
7.1.1 识别模式、数据结构以及开发者癖好
7.1.2 以操作系统为攻击目标
7.1.3 攻击服务器
7.1.4 拒绝服务
7.2 部署应对措施
7.2.1 限制文件访问
7.2.2 使用对象引用
7.2.3 将不安全函数列入到黑名单
7.2.4 强制授权
7.2.5 限制网络连接
7.3 小结
第8章 攻击浏览器和隐私
8.1 理解恶意软件和浏览器攻击
8.1.1 恶意软件
8.1.2 插入到浏览器插件中
8.1.3 DNS和域
8.1.4 HTML5
8.1.5 隐私
8.2 部署应对措施
8.2.1 安全地配置SSL/TLS
8.2.2 更加安全地浏览网页
8.2.3 隔离浏览器
8.2.4 Tor
8.2.5 DNSSEC
8.3 小结