CSRF防御的主要方法有以下几种:
还有一些其他的CSRF防御方法,比如:
CSRF的Token是一种用于防御CSRF攻击的方法。CSRF(跨站请求伪造)是一种利用用户在某个网站的登录状态,冒用用户身份发送恶意请求的攻击1。CSRF的Token是一种随机生成的字符串,它可以通过加密算法对数据进行加密,一般包括随机字符串和时间戳的组合23。CSRF的Token可以输出到页面中,或者存储在客户端的本地存储中。当用户发起请求时,需要携带这个Token,服务器通过校验Token是否正确,来区分正常请求和攻击请求23。这样,攻击者就无法伪造有效的Token,从而防止了CSRF攻击。
CSRF Token的防护策略分为三个步骤:
首先,用户打开页面的时候,服务器需要给这个用户生成一个Token,该Token通过加密算法对数据进行加密,一般Token都包括随机字符串和时间戳的组合,显然在提交时Token不能再放在Cookie中了,否则又会被攻击者冒用。因此,为了安全起见Token最好还是存在服务器的Session中,之后在每次页面加载时,使用JS遍历整个DOM树,对于DOM中所有的a和form标签后加入Token。这样可以解决大部分的请求,但是对于在页面加载之后动态生成的HTML代码,这种方法就没有作用,还需要程序员在编码时手动添加Token。
对于GET请求,Token将附在请求地址之后,这样URL 就变成 http://url?csrftoken=tokenvalue
。 而对于 POST 请求来说,要在 form 的最后加上:
<input type="hidden" name="csrftoken" value="tokenvalue"/>
这样,就把Token以参数的形式加入请求了。