三种模式
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 破坏合法流程的最常见位置;应测试完整重定向链,而不只是直接请求。