网络安全-CSRF攻击

540 阅读2分钟

什么是CSRF攻击

CSRF全称Cross Site Request Forgery(跨站请求伪造),与上文XSS攻击不同,CSRF不侵入目标网站,其核心原理是伪造来自受信任用户的请求

举个例子:A用户刚在浏览器里登录了某银行网站(以下简称A网站),此时A用户收到了一封邮件,他点开发现里面有一个链接(啥链接就不说了...),好奇心驱使他打开了这个链接,刚好他设置的默认浏览器就是刚登录银行的浏览器,点完之后发现没有他想要的东西,但是他收到了银行的一条短信:‘卡号xxxx转账1024元成功’,当时A用户人就傻了...

这就是一个典型的CSRF攻击, 就是的我们来分析一下本次攻击的流程:

  1. 受害者登录A网站,登录凭证保存在cookie中;
  2. 攻击者诱导受害者点击网址,进入攻击者自己的网站;
  3. 受害者进入网站后,该网站执行了一个A网站的转账请求,类似https://bank.com/transferable?amount=1024&to=[攻击者事先准备好的自己的id,让用户转到这里]
  4. 执行上述请求时第一步的cookie会携带在该请求上,服务端验证没问题,执行转账逻辑,over;

以上只是分析原理用的,实际上不可能这么简单啊,但是核心原理基本就是这个;

这里要插入一点额外话题,以前我了解这方面知识的时候,认为第3步的时候浏览器应该会有同源策略阻止该请求啊,事实上了解了更多同源策略相关的知识后我发现 同源策略仅仅能阻止脚本读取该请求的结果,实际上该请求还是发送到了后端,后端依旧会执行...

CSRF攻击的特点

  • 攻击一般发起在第三方网站,而不是被攻击的网站;
  • 攻击利用受害者在被攻击网站的登录凭证,冒充受害者提交操作,而不是直接窃取数据(无法直接获取cookie等信息)。

如何防范CSRF攻击

  1. 服务端验证OriginReferer请求头是否来自本站;
  2. 每次请求加入一个csrf token,这个攻击者可获取不到;
  3. 安全性较高的请求(如上述转账),可增加验证码手机短信验证码等二次验证;
  4. http响应头set-cookie新增same-site属性;

这里如何防范只是给思路,具体的实施方式大家可通过这些关键词参考别的文章,目前来说第4种思路可能兼容性有点差,一版都是第1,2,3种结合使用来防范。