1. CSRF攻击原理javascript
CSRF(Cross site request forgery),即跨站请求伪造。咱们知道XSS是跨站脚本攻击,就是在用户的浏览器中执行攻击者的脚本,来得到其cookie等信息。而CSRF确实,借用用户的身份,向web server发送请求,由于该请求不是用户本意,因此称为“跨站请求伪造”。php
通常并且存在XSS漏洞的网站,也极有可能存在CSRF漏洞。由于CSRF攻击中的那个“伪造的请求”的URL地址,通常是经过XSS攻击来注入到服务器中的。因此其实CSRF是以XSS为基础的,也能够看作是XSS攻击的一种。html
CSRF通常的攻击过程是,攻击者向目标网站注入一个恶意的CSRF攻击URL地址(跨站url),当(登陆)用户访问某特定网页时,若是用户点击了该URL,那么攻击就触发了,咱们能够在该恶意的url对应的网页中,利用 <img src="" /> 来向目标网站发生一个get请求,该请求会携带cookie信息,因此也就借用了用户的身份,也就是伪造了一个请求,该请求能够是目标网站中的用户有权限访问的任意请求。也可使用javascript构造一个提交表单的post请求。好比构造一个转帐的post请求。java
因此CSRF的攻击分为了两步,首先要注入恶意URL地址,而后在该地址中写入攻击代码,利用<img> 等标签或者使用Javascript脚本。web
2. CSRF防护浏览器
2.1 referer服务器
由于伪造的请求通常是从第三方网站发起的,因此第一个防护方法就是判断 referer 头,若是不是来自本网站的请求,就断定为CSRF攻击。可是该方法只能防护跨站的csrf攻击,不能防护同站的csrf攻击(虽然同站的csrf更难)。cookie
2.2 使用验证码post
每个重要的post提交页面,使用一个验证码,由于第三方网站是没法得到验证码的。还有使用手机验证码,好比转帐是使用的手机验证码。网站
2.3 使用token
每个网页包含一个web server产生的token, 提交时,也将该token提交到服务器,服务器进行判断,若是token不对,就断定位CSRF攻击。
将敏感操做又get改成post,而后在表单中使用token. 尽可能使用post也有利于防护CSRF攻击。
3. 有价值的参考
http://www.ibm.com/developerworks/cn/web/1102_niugang_csrf/
http://drops.wooyun.org/papers/155
http://www.cnblogs.com/hyddd/archive/2009/04/09/1432744.html#!comments
https://www.owasp.org/index.php/Category:OWASP_CSRFGuard_Project
http://www.hanguofeng.com/archives/security/preventing-csrf
4. 使用 OWASP CSRFGuard 防护 CSRF
https://www.owasp.org/index.php/Category:OWASP_CSRFGuard_Project
https://www.owasp.org/index.php/CSRFGuard_3_User_Manual
http://blog.csdn.net/testing_is_believing/article/details/11672553