SameSite Cookie 属性详解(Strict/Lax/None)
请解释 Cookie 中 SameSite 属性的三种取值(Strict/Lax/None)在不同跨站请求场景下的行为,以及 Chrome 默认 SameSite=Lax 对 Web 开发的影响。
回答
我是大山
SameSite 三种取值:
1. SameSite=Strict(最严格):
Set-Cookie: session=xxx; SameSite=Strict
- 任何跨站请求都不发送 Cookie
- 包括用户从外部链接点击跳转
- 安全最高,用户体验差(用户从 Google 搜索结果点击到你的网站,Cookie 不会携带,用户需要重新登录)
2. SameSite=Lax(Chrome 80+ 默认):
Set-Cookie: session=xxx; SameSite=Lax
- GET 请求(顶级导航)会发送 Cookie,POST 等不安全方法不发送
- 允许用户从外部链接访问时保持登录状态
- 第三方站点的
<img>/<script>/<iframe>不发送 Cookie(防止 CSRF) - 推荐的默认值,平衡安全和用户体验
3. SameSite=None(需 Secure):
Set-Cookie: session=xxx; SameSite=None; Secure
- 跨站请求无条件发送 Cookie
- 必须同时设置
Secure(仅 HTTPS) - 使用于:第三方登录服务、嵌入式 Widget、广告追踪
Chrome 默认 Lax 的影响:
- 未设置 SameSite 的 Cookie 被视为 Lax(之前默认 None)
- 影响:OAuth 授权回调、iframe 嵌入的第三方服务、POST 表单的 CSRF 防护
- 兼容处理:
- 明确设置
SameSite=None; Secure保持跨站行为 - 前端发送时需处理 CSRF Token 验证
- 明确设置
安全角度:Lax 模式能防御大部分 CSRF 攻击(GET 类操作需确保安全幂等)