chrome 同站策略(samesite)问题及解决方案
chrome 同站策略(samesite)问题及解决方案
Chrome 80 中 跨域传 Cookie 的 Samesite 问题
- 通过设置 Access-Control-Allow-Credentials: true 和 xhr.withCredentials = true,可以实现跨域传递 Cookie. 达到保存用户登录态等目的。但使用不当,也会有 CSRF 风险。
- 所以,从 Chrome 51 开始,浏览器的 Cookie 新增加了一个 SameSite 属性,用来防止 CSRF 攻击和用户追踪。
- 该设置当前默认是关闭的,但在 Chrome 80 之后,该功能默认已开启。
解决
chrome://flags/#same-site-by-default-cookies 设置 disabled,重启浏览器。2021 年 9 月,已经彻底移除可视化禁用和命令行禁用的方式- 将 SameSite 属性值改为 None, 同时 将 secure 属性设置为 true。且需要将后端服务域名必须使用 https 协议访问。(https 需要域名备案)
- 由于设置 SameSite = None,有 SCRF 风险,所以,最佳方案是用 token 代替 Cookie 方式作验证。
通过代理解决跨域问题
- 给后端或者前端一个前缀
- nginx 设置代理:监测某个前缀,转发到指定地址
- 后端 host 设置成 nginx(可以忽略)
++代理的前缀应该也要在后端进行配置,否则可能出现后端的非 xhr 资源重定向失效的问题。++
1 |
|
2023.6.2补充