要完成一次CSRF攻击,受害者必须依次完成两个步骤:
1.登录受信任的网站A,并在本地生成Cookie。
2.在不登出A的情况下,访问危险网站B.
解决方案:
在请求地址中添加token并验证。
要抵御CSRF,关键在于在请求中放入黑客所不能伪造的验证信息,并且该信息不存在于cookie之中,可以在HTTP请求中以参数的形式加入一个随机产生的token,并在服务器端建立一个拦截器来验证这个token,如果请求中没有token或者token内容不正确,则认为可能是CSRF攻击而拒绝该请求。
token 可以在用户登陆后产生并放于 session 之中,然后在每次请求时把 token 从 session 中拿出,与请求中的 token 进行比对,但这种方法的难点在于如何把 token 以参数的形式加入请求。对于 GET 请求,token 将附在请求地址之后,这样 URL 就变成 http://url?csrftoken=tokenvalue。 而对于 POST 请求来说,要在 form 的最后加上 <input type=”hidden” name=”csrftoken” value=”tokenvalue”/>,这样就把 token 以参数的形式加入请求了。
在webx的pipeline.xml文件中加入:
<services:pipeline>
<pl-valves:checkCsrfToken />
</services:pipeline>
在模板文件的表单中加入:
$csrfToken.hiddenField
最后欢迎大家访问我的个人网站:1024s