目前较为常见的预防CSRF攻击的手段有以下几种:使用验证码,目前很多网站都是用这种方式,不但可以预防CSRF攻击,还可以防止恶意频繁提交表单。
使用token令牌,就是在服务端生成一段token,前端每次提交请求到后端的时候,检验该token是否携带token且是否为自己生成,如果不是,则拦截掉该请求。
验证HTTP Referer,验证http请求头中的Referer字段的值,也就是验证请求中的来源网站地址,如果不在白名单之内,则认为是伪造请求。
在http请求头中增加自定义属性,其实这种方式和验证token比较类似,不过这里并不是把token作为请求参数,而是放在http请求头中。
尽量使用post提交请求,因为get请求特别容易被攻击,只要轻松的修改请求地址就可以了。
现在一些前端框架,比如AngularJS等都提供了自己的防止CSRF的方案
不同网站可能使用不同的方式来防止CSRF攻击,有的网站为了安全使用了其中几种方式结合。
CSRF不同于XSS那么简单的转义即可防范,必须结合服务器端来处理,一般都是利用referer、token或者验证码,将持久的认证改成每次认证来实现防御。实现的方法有很多,但是思路都是往客户端增加一个随机数后在下次请求时再提交回来。