预防 CSRF 攻击

145 阅读2分钟

介绍

CSRF(Cross-site request forgery)跨站请求伪造:攻击者诱导受害者进入第三方网站,在第三方网站中,向被攻击网站发送跨站请求。利用受害者在被攻击网站已经获取的注册凭证,绕过后台的用户验证,达到冒充用户对被攻击的网站执行某项操作的目的。


特点

一个典型的 CSRF 攻击有着如下的流程:

  1. 受害者登录 a.com,并保留了登录凭证 Cookie
  2. 攻击者引诱受害者访问了 b.com
  3. b.com 向 a.com 发送了一个请求:a.com/act=xx。浏览器会默认携带 a.com Cookie
  4. a.com 接收到请求后,对请求进行验证,并确认是受害者的凭证,误以为是受害者自己发送的请求
  5. a.com 以受害者的名义执行了 act=xx
  6. 攻击完成,攻击者在受害者不知情的情况下,冒充受害者,让 a.com 执行了自己定义的操作

因此 CSRF 攻击特点是

  • 攻击一般发起在第三方网站,而不是被攻击的网站。被攻击的网站无法防止攻击发生
  • 攻击利用受害者在被攻击网站的登录凭证,冒充受害者提交操作;而不是直接窃取数据
  • 整个过程攻击者并不能获取到受害者的登录凭证,仅仅是“冒用”
  • 冒充的跨站请求可以用各种方式:图片URL、超链接、CORS、Form 提交等等,甚至部分请求方式可以直接嵌入在第三方论坛、文章中,难以进行追踪识别

预防

因为 CSRF 通常从第三方网站发起,被攻击的网站无法防止攻击发生,因此预防 CSRF 攻击主要在于后端服务,专门制定防护策略。

  • 阻止不明外域的访问,如:
    • 同源检测
    • Samesite Cookie
  • 提交时要求附加本域才能获取的信息,如:
    • CSRF Token
    • 双重 Cookie 验证

相关阅读