利用用户的登录状态,访问第三站点来做坏事。 主要是服务器,分不清发起请求的是本人还是黑客

攻击方法

  • 自动发起get请求(比如利用xss插入一个script、img资源)
  • 自动发起post请求
  • 引诱用户点击链接

防御手段

  • 敏感的信息,不要用get接口(提升csrf成本)
  • 最有效的,添加验证码(确定发请求的是用户本人)—— 能防御 99.99%
  • 通过refer记录请求来源,并且验证(用户可能认为你监听了它访问了什么页面)
  • 使用 token (这个时候就要配合 HTTPS 了,让用户拦截也没有用)
  • 充分利用 Cookie 的 SameSite 属性

    • Strict - 跨站请求不会被发送(完全禁止)

      在 b.com 发 a.com 的请求,cookie不会被带上

    • Lax - 允许部分第三方请求携带 cookie

      链接、预加载、get表单可以使用第三方cookie

    • None - 无论是否跨站都会发送 Cookie

      但是有个限制,一定要设置 secure: true —— 即限定 https

chrome很早就推出了cookie的SameSite属性来限制第三方cookie,但是大家不理不睬。所以chrome干脆一不做二不休,在chrome80版本以后默认把cookie的SameSite属性设置为Lax