CSRF 的英文全称是 cross-site request forgery ,缩写也称 XSCF,也被称之为“one click attack” 或者 session riding;
CSRF 和 XSS 非常的像,但是它们是有很大的区别的,并且攻击方式也不一样;XSS 是利用站点内的信任用户,而 CSRF 是通过伪装来自信任用户的请求来利用信任的网站;与 XSS 相比, CSRF 攻击往往不怎么流行也很难防范,所以它的危险性相对更高;
常用的防御方法:1)、验证 http referer 字段;2)、在请求地址中添加 token 并验证;3)、在 http 头中自定义属性并验证;
验证 http referer 字段
根据 http 协议,在 http 头中有一个字段叫 referer ,它记录了该 http 请求的来源地址,在通常情况下,访问一个安全受限页面的请求来自于同一个网站,比如需要访问 http://bank.example/withdraw?account=bob&amount=1000000&for=Mallory,用户必须先登录 bank.example ,然后通过点击页面上的按钮来触发转账事件,这时候,该转账请求的 http referer 值就会是转账所在页面的 url,通常以 bank.example 域名开头的地址,而如果黑客要对银行网站实施 CSRF 攻击,他只能在自己的网站构造请求;
其实这种方法也并不是万无一失的,通过 http referer 的验证其实就是把安全交给了第三方,但是有些浏览器,例如:IE6 和 FF2 ,是可以有一些方法对 referer 的值进行篡改的;
在请求头中添加 token 验证
CSRF 攻击之所以能够成功,是因为黑客可以完全的伪造用户的请求,所以要地域 CSRF,关键在于请求中放入黑客不知道的或者所伪造不了的信息;