本书理论知识讲解详细,实际应用操作配图讲解思路清晰,利于读者快速掌握理论知识与操作技巧。在如今多数软件开发或测试工作中,关注点主要在功能及性能上,而安全性考虑不足,通过阅读“试读章节”,了解到全面的安全性理论知识及强大的安全性测试工具,视野开阔不少,也意识以前项目在安全性方面的欠缺,其中不乏存在一些致命性的漏洞,将在后续项目中必须逐步重视起来。
第六章主要介绍三款(HP WebInspect、w3af、Ratproxy)测试扫描工具,配图详细讲解了各工具的安装及使用,三款工具详细介绍如下:
HP WebInspect:一款易用、可扩展、精确的Web应用安全评估软件,可协助安全专家和新手发现Web应用和服务中存在的高风险漏洞,解决了复杂的Web 2.0问题,且能找到传统扫描程序无法发现的漏洞,支持如今最复杂的Web应用技术,由于采用了突破性自动测试技术(包括SCA和同步应用扫描),所以可以迅速、准确地发现Web应用的安全漏洞。
w3af:主动扫描工具,w3af(Web Application Attack and Audit Framework)是一个Web应用程序攻击和审计框架。可以检测SQL注入、跨站脚本、本地和远程文件包含等漏洞。
Ratproxy:被动扫描利器,被动扫描也称为半自动扫描。用户在浏览器设置一个代理后,在浏览器里访问服务器时,代理会自动记下用户访问的网址并进行分析,其分析的范围仅限于用户访问过的页面,从而扫描的时间会大大缩短,且更有针对性。就现在被广泛采用的敏捷开发,使用被动扫描可只针对需要测试的功能进行安全审核。
第十章主要讲身份认证和会话管理。在安全领域中,有两个非常重要的概念——Authentication(身份验证)和Authorization(授权)。一般来说,认证方式的强度从弱到强依次为:
1、What you know——你知道什么
最常见的就是用户名/密码,以及一些你知道答案的问题。例如:你小学里的老师名字叫什么、你最喜爱的球星是谁等等。
2、What you have——你拥有什么
常见的方式是一些实体硬件,如令牌产生器(一次性密码)、手机等。
3、What you are——你是什么
比如指纹扫描、脸谱扫描、视网膜扫描等,利用人基本且唯一的一些生物特征。
使用时,为了增加系统的机密性,建议采用双因子身份验证,即上面3种认证方式中的两种方式的组合。
Web会话:HTTP协议的无状态特性,意味着Web应用并不了解同一用户以前请求的信息。会话就是在服务器端维护每次HTTP请求的状态。这样,一旦一个经过验证的会话建立了,那么Session ID就基本等同于我们上面所说的用户名/密码、一次性令牌等,每个用户的Session ID都应该是唯一的以及不可预测的。
针对会话的攻击方式主要有如下两类:
1、直接会话攻击方式:会话劫持、会话固定两种方式。
2、非直接会话攻击方式:以Puzzle Mall应用,网站攻击利器burp suite详细讲述此类攻击方式。
会话ID(SID):由服务器产生并返回给浏览器的请求,并且在浏览器中存储(通常来说是Cookie),它用来标识浏览器与服务器会话的唯一值。通过SID的名字可以基本判定应用服务器和编程语言是什么,如PHPSESSID(PHP)、JSESSIONID(J2EE)、CFID& CFTOKEN(ColdFusion)、ASP.NET_SessionId (ASP.ET)等。为安全性考虑,建议将默认的SID的名字换成大众化的名字,如ID。为了防止暴力破解,SID必须有一定的长度,它的长度至少要128位(16字节)。此外,SID还必须是不可预测的(随机的),来防止预测攻击。
会话固定测试:固定会话漏洞发生在Web 应用程序在不废止现有的会话ID(未经验证)前提下验证一个用户,从而导致应用程序继续使用未验证之前所用到的同一个会话ID。可通过使用Web Scrab分析会话ID判定。
预防固定会话攻击:最基本的建议就是一旦用户登录成功以后,马上invalidate用户的会话。
保护你的会话令牌:
1.采用强算法生成Session ID;
2.软硬兼施,会话过期;
通常有3种办法来设定软会话过期,其级别由高到低依次为:Tomcat级别> Web应用级别>Servlet运行时context级别,低级别的设定会覆盖高级别的设定。
a.Tomcat级别的设定。
<!--30分钟会话过期,在{TOMCAT_HOME}\conf\web.xml中设定--> <session-config> <session-timeout>30</session-timeout><!-- set in minutes --> </session-config>
b.Web应用级别的设定。
<!--15 分钟会话过期,在{TOMCAT_HOME}\webapps\{APP_NAME}\WEB-INF\web.xml中设定--> <session-config> <session-timeout>15</session-timeout><!-- set in minutes --> </session-config>
c.在程序代码中进行设定。
/*5分钟会话过期,代码中设定*/ httpSession.setMaxInactiveInterval(5*60); // set in seconds
第十二章主要讲跨站请求伪造(CSRF),CSRF(Cross-site Request Forgery),跨站请求伪造,也被称为“one click attack”或者session riding,通常缩写为CSRF或者XSRF,是一种对网站的恶意利用。通过常见的场景解说CSRF攻击的详细过程。而家用路由器、POST请求方式也可以成功实现攻击。
半自动CSRFTester是一款很好的CSRF的检测工具,通过实例实例详细讲解操作过程。
针对跨站请求伪造的预防方法主要有如下几种:
1、 在重要的网站进行操作后,及时退出;
2、 访问重要网站与网上冲浪使用不同的浏览器,避免会话session共享;
3、 增加确认操作,如删除、新增、修改等做出相应提示;
4、 重新认证:如针对重要操作,需重新输入密码等;
5、 加入验证码(CAPTCHA);
本书中详细讲述使用ESAPI解决CSRF的步骤。
OWASP CSRF Guard是一个实现了Token模式的Java类库,主要用来防止CSRF攻击。它可以利用J2EE的Filter自动地把Token插入到每个HTML中。任何尝试对没有Token的请求的提交,都被视为CSRF攻击,会被阻止。对于这些被阻止的请求,CSRF Guard可以配置为记日志和把用户导向一个加载页面。
在项目的重要功能中一定要加入Token保护,不要迷信POST比GET更安全,否则一个小窟窿,绝千里之堤。
纵观本书针对Web应用安全方面讲解详细,应该可以算是一本在web开发过程中为提升系统安全性必需的一本书籍。