chrome 同站策略(samesite)问题及解决方案

chrome 同站策略(samesite)问题及解决方案

  • 通过设置 Access-Control-Allow-Credentials: true 和 xhr.withCredentials = true,可以实现跨域传递 Cookie. 达到保存用户登录态等目的。但使用不当,也会有 CSRF 风险。
  • 所以,从 Chrome 51 开始,浏览器的 Cookie 新增加了一个 SameSite 属性,用来防止 CSRF 攻击和用户追踪。
  • 该设置当前默认是关闭的,但在 Chrome 80 之后,该功能默认已开启。

解决

  1. chrome://flags/#same-site-by-default-cookies 设置 disabled,重启浏览器。 2021 年 9 月,已经彻底移除可视化禁用和命令行禁用的方式
  2. 将 SameSite 属性值改为 None, 同时 将 secure 属性设置为 true。且需要将后端服务域名必须使用 https 协议访问。(https 需要域名备案)
  3. 由于设置 SameSite = None,有 SCRF 风险,所以,最佳方案是用 token 代替 Cookie 方式作验证。

通过代理解决跨域问题

  1. 给后端或者前端一个前缀
  2. nginx 设置代理:监测某个前缀,转发到指定地址
  3. 后端 host 设置成 nginx(可以忽略)

++代理的前缀应该也要在后端进行配置,否则可能出现后端的非 xhr 资源重定向失效的问题。++

1
2
3
location ^~/suffix {
proxy_pass 需要代理的地址
}

2023.6.2补充