关于前端安全CSRF
跨站请求伪造(英語:Cross-site request forgery),也被称为 one-click attack 或者 session riding,通常缩写为 CSRF 或者 XSRF, 是一种挟制用户在当前已登录的Web应用程序上执行非本意的操作的攻击方法。
1.攻击原理
假设用户登录到不受保护的某银行网站,并且使用会话 cookie 或 JWT cookie 进行身份验证,并进行转账操作
假如其转账操作的URL地址如下:
http://www.examplebank.com/withdraw?account=AccoutName&amount=1000&for=PayeeName
攻击者欺骗用户执行脚本(通过点击垃圾邮件链接或类似)
用户进入第三方网站
<img src="http://www.examplebank.com/withdraw?account=Alice&amount=1000&for=Badman
由于不受保护的某银行网站的登录信息未过期,服务器将成功地验证用户身份并执行交易
在CSRF中攻击者并不直接获取用户信息,其只是欺骗用户浏览器,让其以用户的名义进行操作
2.攻击流程
3.预防策略
1.检查Referer字段
HTTP头中有一个Referer字段,这个字段用以标明请求来源于哪个地址。
在处理敏感数据请求时,通常来说,Referer字段应和请求的地址位于同一域名下。
以上面银行操作为例,
Referer字段地址通常应该是转帐按钮所在的网页地址,应该也位于www.examplebank.com之下。
而如果是CSRF攻击传来的请求,Referer字段会是包含恶意网址的地址,
不会位于www.examplebank.com之下,这时候服务器就能识别出恶意的访问。
但存在恶意篡改其Referer字段的可能
2.token验证
既然攻击者利用第三方cookie的方式去获取用户信息,并验证用户身份这种方式进行攻击,
可以采取增加一个独立的token进行认证,
在用户登录信任网站的时候,服务端生成一个唯一token并给到用户,
用户每次和服务端通信,都会校验token的有效性,
如果校验token失败,则认为可能是 CSRF 攻击而拒绝该请求。