CSRF

CSRF 是什么

CSRF(Cross-site request forgery,跨站请求伪造)也被称作 one-click attack 或 session riding,通常被缩写为 CSRF 或 XSRF。

CSRF 利用网站对用户浏览器的信任,在用户当前已登录的网站上执行非用户本意的操作。

CSRF 攻击细节

流程

举例

假如一家银行用以运行转账操作的 URL 地址如下: https://bank.example.com/withdraw?account=AccoutName&amount=1000&for=PayeeName

攻击者可以在另一个网站上放置如下代码: <img src="https://bank.example.com/withdraw?account=Alice&amount=1000&for=Badman" />。如果有账户名为 Alice 的用户在访问过银行,且登录信息未过期的情况下访问了恶意站点,那么她将会被转走 1000 。

总结

完成 CSRF 攻击必须的前提条件有:

  1. 用户在 A 网站 Cookie 没失效的情况下访问恶意 B 网站
  2. A 网站只通过 Cookie 来校验用户认证

CSRF 攻击者并不能直接获取用户的账户控制权,也不能直接窃取用户的任何信息。他们能做到的,利用用户已有的认证信息,以用户的名义发送恶意请求

恶意网址 B 有很多种形式,攻击者甚至不需要管理放置恶意网址的网站。例如攻击者可以将恶意地址藏在论坛、博客等任何用户生成内容的网站中。这意味着如果服务端没有合适的防御措施的话,用户即使访问熟悉的可信网站也有受攻击的危险

CSRF 防御

将下面方法结合起来对 CSRF 进行防御:

  • 通过添加 CSP HTTP 头部来设置有效域
  • 对于修改操作的接口一定要设置成 POST 请求
  • 对于 POST 请求必须携带 token ,后端接到请求对 token 进行校验
    • 前端可以将请求接口封装起来,在接口内部对请求同一携带 token

参考:

https://zh.wikipedia.org/wiki/%E8%B7%A8%E7%AB%99%E8%AF%B7%E6%B1%82%E4%BC%AA%E9%80%A0

https://www.cnblogs.com/hyddd/archive/2009/04/09/1432744.html

https://juejin.im/post/6844903689702866952#heading-6