CSRF

防御手段

CSRF防御的主要方法有以下几种:

还有一些其他的CSRF防御方法,比如:

CSRF的Token

CSRF的Token是一种用于防御CSRF攻击的方法。CSRF(跨站请求伪造)是一种利用用户在某个网站的登录状态,冒用用户身份发送恶意请求的攻击1。CSRF的Token是一种随机生成的字符串,它可以通过加密算法对数据进行加密,一般包括随机字符串和时间戳的组合23。CSRF的Token可以输出到页面中,或者存储在客户端的本地存储中。当用户发起请求时,需要携带这个Token,服务器通过校验Token是否正确,来区分正常请求和攻击请求23。这样,攻击者就无法伪造有效的Token,从而防止了CSRF攻击。

验证步骤

CSRF Token的防护策略分为三个步骤:

  1. 将CSRF Token输出到页面中

首先,用户打开页面的时候,服务器需要给这个用户生成一个Token,该Token通过加密算法对数据进行加密,一般Token都包括随机字符串和时间戳的组合,显然在提交时Token不能再放在Cookie中了,否则又会被攻击者冒用。因此,为了安全起见Token最好还是存在服务器的Session中,之后在每次页面加载时,使用JS遍历整个DOM树,对于DOM中所有的a和form标签后加入Token。这样可以解决大部分的请求,但是对于在页面加载之后动态生成的HTML代码,这种方法就没有作用,还需要程序员在编码时手动添加Token。

  1. 页面提交的请求携带这个Token

对于GET请求,Token将附在请求地址之后,这样URL 就变成 http://url?csrftoken=tokenvalue​。 而对于 POST 请求来说,要在 form 的最后加上:

<input type="hidden" name="csrftoken" value="tokenvalue"/>

这样,就把Token以参数的形式加入请求了。