SameSite Cookie 属性用于控制跨站请求时是否发送 Cookie,是防止 CSRF(跨站请求伪造)攻击的重要安全机制。
SameSite 的三个值
-
Strict(严格模式)
- 完全禁止跨站请求携带 Cookie
- 最安全,但用户体验较差
- 示例:
Set-Cookie: token=xyz; SameSite=Strict - 使用场景:银行、支付等高安全要求的网站
-
Lax(宽松模式)
- 允许部分安全的跨站请求携带 Cookie
- 平衡安全性和用户体验
- 示例:
Set-Cookie: token=xyz; SameSite=Lax - 允许的请求:GET 请求、顶级导航、表单 GET 提交
- 不允许的请求:POST 请求、iframe、图片、脚本等
-
None(允许跨站)
- 允许所有跨站请求携带 Cookie
- 必须配合 Secure 属性使用
- 示例:
Set-Cookie: token=xyz; SameSite=None; Secure - 使用场景:第三方登录、跨域 API 调用
CSRF 防护原理
- 攻击者无法在恶意网站发起的请求中携带目标网站的 Cookie
- 即使用户已登录目标网站,跨站请求也无法通过身份验证
浏览器兼容性
- Chrome 51+、Firefox 60+、Safari 12+、Edge 79+
- 旧版本浏览器默认行为相当于 None
最佳实践
- 一般网站使用 SameSite=Lax
- 高安全要求使用 SameSite=Strict
- 需要跨域时使用 SameSite=None; Secure
- 结合 CSRF Token 提供双重防护