← 中文资源

简体中文版本

SameSite Cookie

SameSite 控制跨站请求是否携带 Cookie。Lax、Strict 与 None 在 CSRF 防护与可用性之间取舍,None 必须配合 Secure。

阅读英文原文

三种模式

Set-Cookie: session=abc; HttpOnly; Secure; SameSite=Lax; Path=/
  • Strict — 任何跨站请求都不发送。CSRF 防护最强,但用户从外部链接进入时,首次导航看起来像未登录。
  • Lax — 同站请求和顶层安全导航会发送,是会话 Cookie 的实用默认值。
  • None — 所有请求都发送;某些嵌入或跨站场景需要,且必须配合 Secure。

为什么重要

CSRF 依赖浏览器在跨站请求中附带 Cookie。SameSite 阻止大多数状态变更的跨站请求携带 Cookie,但不是完整 CSRF 防御:子域和同站攻击者仍可能符合条件,部分客户端也可能不执行该属性。

如何选择

普通会话 Cookie 使用 Lax。敏感 Cookie(如内部工具的管理员会话)使用 Strict,确保它永远不随跨站导航发送。只有合法的跨站嵌入才使用 None,并配合 Secure 并明确审查风险。

陷阱

未设置 SameSite 的 Cookie 在现代浏览器中可能按 Lax 处理,但旧客户端行为不同;应显式设置。None 不带 Secure 会被拒绝。OAuth 与支付重定向是 Strict 破坏合法流程的最常见位置;应测试完整重定向链,而不只是直接请求。