2026年5月30日 01:00
SameSite Cookie 如何防止 CSRF?Strict、Lax、None 怎么选?
SameSite 是 Set-Cookie 的属性,用来决定 Cookie 是否会随跨站请求发送。它能缓解 CSRF,是因为 CSRF 依赖“用户已登录,浏览器自动带上目标站 Cookie”。当 Cookie 设置为 Strict 或多数情况下的 Lax 时,恶意站点发起的跨站 POST、iframe、图片等请求通常拿不到登录态。常规业务优先用 Lax;高敏感操作用 Strict;确实需要第三方嵌入或跨站登录时才用 None,并且必须同时加 Secure。
追问
Lax 会完全禁止跨站 Cookie 吗?
不会。跨站顶级导航的安全方法,比如用户点击链接发起 GET,仍可能携带 Cookie,所以它更像折中方案。
SameSite=None 为什么必须配 Secure?
因为 None 允许跨站携带 Cookie,如果不用 HTTPS,Cookie 更容易在链路上泄露,现代浏览器也要求 None; Secure 组合使用。
有 SameSite 还需要 CSRF Token 吗?
高风险写操作仍建议保留 Token。SameSite 是浏览器策略,Token 是服务端校验,两者叠加更稳。
项目里怎么选默认值?
登录态默认 Lax;支付确认、改密码这类敏感 Cookie 用 Strict;第三方登录回调、嵌入式应用再评估 None; Secure。
写段代码
httpSet-Cookie: session=abc; Secure; HttpOnly; SameSite=Lax; Path=/ Set-Cookie: iframe_token=xyz; Secure; HttpOnly; SameSite=None; Path=/