0x00 CSRF简介

​ CSRF(Cross-site request forgery)跨站请求伪造,也被称为 One Click Attack 或者 Session Riding,是一种对网站的恶意利用。由于目标站点无 Token / Referer 限制,导致攻击者可以用户的身份完成操作达到各种目的。

​ 攻击者通过一些技术手段欺骗用户的浏览器去访问一个自己曾经认证过的网站并执行一些操作(如发邮件、发消息、甚至财产操作:转账、购买商品等)。由于浏览器曾经认证过,所以被访问的网站会认为是真正的用户操作而去执行。这利用了web中用户身份认证的一个漏洞:简单的身份验证只能保证请求发自某个用户的浏览器,却不能保证请求本身是用户自愿发出的。


0x01 CSRF 攻击原理

1.用户C打开浏览器,访问受信任网站A,输入用户名和密码请求登录网站A;
2.在用户信息用过验证后,网站A产生Cookie信息并返回给浏览器,此时用户登录网站A成功,可以正常发送请求到网站A;
3.用户未退出网站A之前,在同一浏览器中打开一个TAB页访问网站B;
4.网站B接受到用户请求后,返回一些攻击性代码,并发出一个请求要求访问第三方站点A;
5.浏览器在接收到这些攻击性代码后,根据网站B的请求,在用户不知情的情况下携带Cookie信息,向网站A发出请求。网站A并不知道该请求其实是由B发起的,所以会根据用户C的Cookie信息以C的权限处理该请求,导致来自网站B的恶意代码被执行。
image-20210726114717127

0x03 修复方案

  1. 关键操作仅支持 POST 请求
  2. 验证码:每次用户操作要求用户输入验证码(严重影响用户体验)
  3. 检测 Referer :通过 Referer Check 用于监控 CSRF 的攻击 (不能阻止 CSRF 攻击)
  4. Token :添加 Token 来使攻击者无法构造出合法请求进行攻击

0x04 总结

CSRF 成功是由于攻击者可以构造出合法的请求,并且服务器无法确认攻击时来自于用户还是浏览器。针对上述操作只可以从两个方向解决:其一就是防止攻击者构造出合法请求,其二就是可以使服务器确定是用户还是攻击者发起的请求。

方向一:对请求的参数进行加密 / 不改变原有的请求参数,添加新的随机参数

方向二:进行二次验证,验证码 / 独立密码等。