**CSRF(Cross-site request forgery,跨站点请求伪造)**是一种挟制用户在当前已登录的 Web 应用程序上执行非本意的操作的攻击方法。与 XXS 相比,XSS 利用的是用户对指定网站的信任,而 CSRF 利用的是网站对用户网页浏览器的信任。
- 用户登录了受信任的网站,并在本地生成了 cookie。
- 在不退出登录的情况下,访问了危险网站。
- 危险网站会发出一个请求到受信任的网站,受信任的网站不知道请求是用户访问的还是危险网站访问的,由于浏览器会自动带上用户 cookie,所以受信任的网站会根据用户的权限处理危险网站所发出的请求,达到了模拟用户操作的目的。
- 对于 GET 的请求,我们不应对数据进行任何修改操作。
- 请求时附带验证信息,比如验证码或者
token
。 - 对于
cookie
,我们可以设置SameSite
(Lax
或Strict
)来规定浏览器不能在跨域请求中携带 Cookie,可以减少 CSRF 攻击。 - 验证 HTTP
Referer
字段,判断请求来源。Referer
指的是页面请求来源。意思是只接受本站的请求,服务器才做响应,如果不是,就拦截请求。