基础
-
CSRF的全名为Cross-site request forgery,它的中文名为 跨站请求伪造。CSRF是一种夹持用户在已经登陆的web应用程序上执行非本意的操作的攻击方式。
-
CSRF攻击:攻击者盗用了你的身份,以你的名义发送恶意请求。CSRF能够做的事情包括:以你名义发送邮件,发消息,盗取你的账号,甚至于购买商品,虚拟货币转账…造成的问题包括:个人隐私泄露以及财产安全。
例子
-
不提交csrf_token验证上面防护。这csrf_token字段就是用来表单提交,POST请求验证的csrf_token,后端生成的,提交后会和后端校验。
<div> <!--Spring 3.2+和 Thymeleaf 2.1+可以通过这条语句自动生成一个csrf_token来验证--> <form name="f" action="/csrf/post"method="post"> <input type="text" name="input" /> <input type="submit" value="Submit" /> <input type="hidden"th:name="${_csrf.parameterName}"th:value="${_csrf.token}" /><!--使用spring中内置token--> </form> </div>
解决
- 在表单里隐藏一个随机变化的 csrf_token提交到后台进行验证,如果验证通过则可以继续执行操作。这种情况有效的主要原因是网站 B 拿不到网站 A 表单里的 csrf_token。
- 这种方式的使用条件是PHP和JSP等。因为cookie已经不安全了,因此把csrf_token值存储在session中,然后每次表单提交时都从session取出来放到form表单的隐藏域中,这样B网站不可以得到这个存储到session中的值。