第1版出版4年以来,许多事情发生了改变,而许多事情仍保持原状。当然,新技术继续高速发展,这引发了各种新型漏洞和攻击。同时,黑客们还开发出了新的攻击技术,设计了利用旧有漏洞的新方法。但是,这些技术或人为因素都不可能引发革命。今天应用程序采用的技术早在许多年前就已经确立,现今的先进攻击技术所蕴涵的基本概念也早在高效应用这些技术的许多研究人员出生之前就已经成形。Web应用程序安全是一个动态且充满活力的研究领域,但多年来,人类积累的智慧也在缓慢进化,因此,当前的技术状况与10年或更久以前的情况截然不同。
第2版并不是对第1版的彻底改写,第1版的大部分内容,现在仍然适用。第2版约30%的内容为新增内容或改动很大,剩余70%的内容仅有小幅改动或未作任何修改。如果读者购买了本书,但对这些改动感到失望,请不要放弃。如果你已经掌握了第Ⅰ版中介绍的所有技巧,说明你已经学会所需的绝大部分技能和知识。这样的话,你就可以集中精力学习本书的新增内容,迅速了解Web应用程序安全领域近年来的发展变化情况。
第2版的一个显著特点是,在整本书中提供了所介绍的几乎所有漏洞的真实示例。读者可以使用“尝试访问”链接以交互方式在线运行书中讨论的示例,以确认可以发现并利用其中包含的漏洞。书中提供了几百个“示例实验室”,读者可以根据自己阅读本书的进度逐个访问这些“实验室”。访问这些在线“实验室”需要支付一定的订阅费用,这些费用主要用于管理和维护相关基础设施。
如果读者希望集中精力学习第2版中的新增内容,以下是对新增或改写内容的汇总。
第1章仅部分内容有所改动,将介绍Web应用程序的新应用、技术领域的一些显著趋势,以及组织的典型安全边界将如何继续发展变化。
第2章仅有小幅改动,新增内容将介绍几个用于避开输入确认防御的常规技巧示例。
第3章增加了几节新内容,主要介绍各种新技术及已在第1版中简要介绍的技术。新增的主题包括REST、Ruby on Rails、SQL、XML、Web服务、CSS、VBScript、文档对象模型、Ajax、JSON、同源策略和HTML5。
第4章仅有少量更新,以反映用于解析内容和功能的技术的发展趋势。
第5章进行了进行大幅改动。具体来说,基本上重新编写了有关浏览器扩展技术的几节内容,详细介绍了反编译和调试字节码的常规方法、如何处理常规格式的序列化数据,以及如何处理渗透测试过程中遇到的常见问题,包括不支持代理的客户端和SSL问题。本章还将介绍Silverlight技术。
第6章内容与现今情况保持一致,仅有小幅改动。
第7章新增内容主要介绍自动测试令牌随机性的新工具。本章还包含有关攻击加密令牌的新内容,包括如何在不了解所使用的加密算法或加密密钥的情况下篡改令牌的实用技巧。
第8章将介绍一些访问控制漏洞,包括由直接访问服务器端方法以及平台配置不当(将基于HTTP的方法用于执行访问控制)导致的漏洞。本章还将介绍一些新工具和技巧,可在一定程度上自动完成测试访问控制的繁琐任务。
第9章和第10章的内容经过重组,因而变得更易于管理,其章节安排也更符合逻辑。第9章主要介绍针对其他数据存储技术的SQL注入和其他类似攻击。由于SQL注入漏洞已广为人知,并且在很大程度上得到了解决,因此,本章将着重介绍现在仍然可以发现SQL注入漏洞的实际情形。本章的其他内容也有小幅改动,将介绍当前的技术和攻击方法。同时,本章还新增了一节内容,用于说明如何使用自动化工具来利用SQL注入漏洞。有关LDAP注入的内容经过大幅改动,以更详细地介绍特定技术(Microsoft Active Directory和OpenLDAP),以及利用常见漏洞的新技巧。此外,本章还将介绍针对NoSQL的攻击。
第10章讨论以前在第1版第9章中介绍的其他类型的服务器端注入漏洞。新增内容主要介绍XML外部实体注入和注入后端HTTP请求,包括HTTP参数注入/污染和注入URL改写方案。
第11章将提供更多常见输入确认功能逻辑缺陷的实例。由于越来越多的应用程序采用加密来保护静态数据,本章还将介绍如何确定并利用加密提示来解密加密数据的示例。
第1版的第12章主要介绍针对其他应用程序用户的攻击。第2版将这一章内容放到了两章中,因为这些内容过于繁杂,不易管理。第12章主要讨论XSS,相关内容经过大幅改动。有关如何避开防御过滤以插入脚本代码的内容已完全重写,主要介绍一些新技术和新技巧,包括在当前浏览器中执行脚本代码的各种鲜为人知的方法。同时,本章还将更详细地介绍如何对脚本代码进行模糊处理,以避开常用的输入过滤的方法。本章还将介绍一些现实中新出现的XSS攻击示例。新增一节内容介绍了如何在充满挑战的情况下实施有效的XSS攻击,涵盖如何将攻击扩散到所有应用程序页面、如何通过cookie和Referer消息头利用XSS,以及如何在XML等非标准请求和响应内容中利用XSS。此外,本章还将分析浏览器的内置XSS过滤器,以及如何避开这些过滤器来实施攻击。新增几节还将讨论在Web邮件应用程序和上传文件中利用XSS的特定技巧。本章最后介绍可用于阻止XSS攻击的各种新的防御措施。
第13章为新增的一章,介绍“攻击用户”这一涉及广泛的主题的其他内容。有关跨站点请求伪造的主题经过更新,将介绍针对登录功能的攻击、反CSRF防御中的常见缺陷、UI伪装攻击,以及破坏框架防御中的常见缺陷。跨域捕获数据一节(13.2节)节将介绍如何通过注入包含非脚本HTML和CSS的文本来窃取数据的技巧,以及各种使用JavaScript和E4X跨域捕获数据的技巧。新增一节更详细地介绍同源策略,包括其在不同浏览器扩展技术中的实施情况、HTML5带来的改变,以及通过代理服务应用程序跨域操作的方法。另设新增节介绍客户端cookie注入、SQL注入和HTTP请求污染。有关客户端隐私攻击的内容经过扩充,将介绍浏览器扩展技术和HTML5提供的存储机制。最后,另一个新增节将集中介绍不依赖任何特殊应用程序中的漏洞、针对Web用户的攻击。这些攻击可以由任何恶意或已被攻破的Web站点,或位于网络中的适当位置的攻击者实施。
第14章新增部分内容介绍自动化攻击过程中遇到的常见障碍,以及如何克服这些障碍。许多应用程序采用防御性的会话处理机制来终止会话,使用临时的反CSRF令牌,或使用多阶段过程来更新应用程序状态。本章将介绍一些处理这类机制的新工具,以便于继续应用自动化测试技巧。新增章节将介绍CAPTCHA控件,以及一些通常能够加以利用来破解这些控件的常见漏洞。
第15章包含有关错误消息中的XSS及利用解密提示的新章节。
第16章未进行任何更新。
第17章中的新增节主要介绍基于云的体系架构中的漏洞,并更新了有关如何利用体系架构弱点的示例。
第18章包含在应用程序服务器和平台中发现的一些有趣的新漏洞示例。这些服务器和平台包括Jetty、JMX管理控制台、ASP.NET、Apple iDisk服务器、Ruby WEBrick Web服务器和Java Web服务器。另一个新增节介绍突破Web应用程序防火墙的实用方法。
第19章未进行任何更新。
第20章的更新内容将详细介绍基于代理的工具套件的最新功能。新增节将介绍如何传送不支持代理的客户端的流量,以及如何减少因使用拦截代理服务器而在浏览器和其他客户端中出现的SSL错误。本章还将详细介绍使用基于代理的工具套件进行测试时通常采用的工作流程。此外,本章还将讨论各种最新Web漏洞扫描器及在各种情况下使用这些扫描器的最佳方法。
第21章的更新内容将介绍在整本书中描述的新的方法论步骤。