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 攻击必须的前提条件有:
- 用户在 A 网站 Cookie 没失效的情况下访问恶意 B 网站
- 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