5.1 知识要点与实验目标
5.1.1 CSRF定义与产生原理
跨站请求伪造(Cross-Site Request Forgery,CSRF)也被称为“One Click Attack”或“Session Riding”或“Confused Deputy”,它是通过第三方伪造用户请求来欺骗服务器,以达到冒充用户身份、行使用户权利的目的。其通常缩写为CSRF或者XSRF,是一种对网站的恶意利用。
CSRF虽然叫跨站请求伪造,实际上同站也能受此攻击。
CSRF之所以能够广泛存在,主要原因是Web身份认证及相关机制的缺陷,而当今Web身份认证主要包括隐式认证、同源策略、跨域资源共享、Cookie安全策略、Flash安全策略等。
1.隐式认证
现在Web应用程序大部分使用Cookie/Session来识别用户身份以及保存会话状态,而这项功能当初在建立时并没有考虑安全因素。假设一个网站使用了Cookie/Session的隐式认证,当一个用户完成身份验证之后,浏览器会得到一个标识用户身份的Cookie/Session,只要用户不退出或不关闭浏览器,在用户之后再访问相同网站下页面的时候,浏览器对每一个请求都会“智能”地附带上该网站的Cookie/Session来标识自己,用户不需要重新认证就可以被该网站识别。
当第三方Web页面产生了指向当前网站域的请求时,该请求也会带上当前网站的Cookie/Session。这种认证方式称为隐式认证。
这种隐式认证带来的问题就是一旦用户登录某网站,然后单击某链接进入该网站下的任意一个网页,那么他在此网站中已经认证过的身份就有可能被非法利用,在用户不知情的情况下,执行了一些非法操作。而这一点普通用户很少有人知道,给CSRF攻击者提供了便利。
2.同源策略
同源策略(Same Origin Policy,SOP):指浏览器访问的地址来源要求为同协议、同域名和同端口的一种网络安全协议。要求动态内容(例如,JavaScript)只能读取或者修改与之同源的那些HTTP应答和Cookie,而不能读取来自非同源地域的内容。同源策略是一种约定,它是浏览器最核心也是最基本的安全功能。如果缺少了同源策略,那么浏览器的正常功能都会受到影响。可以说Web网络是构建在同源策略基础之上的,浏览器只是针对同源策略的一种实现。同源策略是由Netscape提出的一个著名的安全策略,现在所有支持JavaScript的浏览器都会使用这个策略。
不过,同源策略仅仅阻止了脚本读取来自其他站点的内容,但是却没有防止脚本向其他站点发出请求,这也是同源策略的缺陷之一。
同源策略(SOP):指浏览器访问的地址来源要求为同协议、同域名和同端口的一种网络安全协议。
3.跨域资源共享
同源策略用于保证非同源不可请求,但是在实际场景中经常会出现需要跨域请求资源的情况。跨域资源共享(Cross-Origin Resource Sharing,CORS),这个协议定义了在必须进行跨域资源访问时,浏览器与服务器应该如何进行沟通。随着Web2.0的盛行,CORS协议已经成为W3C的标准协议。CORS是一种网络浏览器的技术规范,它为Web服务器定义了一种方式,允许网页从不同的域访问其资源。而这种访问是被同源策略所禁止的。CORS系统定义了一种浏览器和服务器交互的方式来确定是否允许跨域请求。它是一种妥协,有更大的灵活性,但比起简单地允许所有这些的要求来说更加安全。可以说CORS就是为了让AJAX可以实现可控的跨域访问而产生的。
CORS默认不传Cookie,但是Access-Control-Allow-Credentials设为true就允许传,这样就会给CSRF攻击创造了条件,增加CSRF攻击的风险。
跨域资源共享(CORS):定义了一种浏览器和服务器交互的方式来确定是否允许跨域请求,它是一个妥协,但有更大的灵活性。
4.Cookie安全策略
Cookie就是服务器暂存放于计算机里的资料(以.txt格式的文本文件存放在浏览器下),通过在HTTP传输中的状态,让服务器来辨认用户。用户在浏览网站的时候,Web服务器会将用户访问的信息、认证的信息保留起来。当下次再访问同一个网站的时候,Web服务器会先查看有没有用户上次访问留下的Cookie资料,如果有的话,就会依据Cookie里的内容来判断使用者,送出特定的网页内容给用户。
Cookie包括持久的和临时的两种类型。持久的Cookie可以设置较长的使用时间,例如一周、一个月、一年等,在这个期限内此Cookie都是有效的。对于持久的Cookie,在有限时间内,用户登录认证之后就不需要重新登录认证(排除用户更换、重装计算机的情况,因为计算机更换后,本地文件就会消失,需要重新登录验证)。这种持久的Cookie给CSRF攻击带来了便利,攻击者可以在受害者毫无察觉的情况下,利用受害者的身份去与服务器进行连接。因此,不建议网站开发者将身份认证的Cookie设为持久性的。临时的Cookie主要是基于Session的,同一个会话(Session)期间,临时认证的Cookie都不会消失,只要用户没有退出登录状态或者没有关闭浏览器。
Cookie包括持久型和临时型两种类型。
CSRF就是利用已登录用户在每次操作时,基于Session Cookie完成身份验证,不需要重新登录验证的特点来进行攻击。在用户无意识的情况下,利用用户已登录的身份完成非法操作。
5.Flash安全策略
Flash安全策略是一种规定了当前网站访问其他域的安全策略,该策略通常定义在一个名为crossdomain.xml的策略文件中。该文件定义哪些域可以和当前域通信。但是错误的配置文件可能导致Flash突破同源策略,导致用户受到进一步的攻击。
不恰当的crossdomain.xml配置对存放了敏感信息的网站来说是具有很大风险的,可能导致敏感信息被窃取和请求伪造。利用此类安全策略的缺陷,CSRF攻击者不仅可以发送请求,还可以读取服务器返回的信息。这意味着CSRF攻击者可以获得已登录用户可以访问的任意信息,甚至还能获得anti-csrf token(anti-csrf token是网站研发人员为了保护网站而设置的一串随机生成数)。