SameSite 是一个 cookie 属性,用来限制跨站请求时浏览器发送 cookie 的行为,旨在提高安全性,防止 CSRF(跨站请求伪造)攻击。SameSite 主要有三个参数值:Strict、Lax 和 None,它们在不同的场景下控制 cookie 的发送行为。
1. SameSite=Strict
- 描述:该设置要求 cookie 只在同一站点的请求中发送,即只有当前页面和其他来自同一站点的请求才会携带该 cookie。
- 使用场景:当你希望强制 cookie 只能在本域内使用,防止跨站请求时发送 cookie。例如,某些敏感的操作或身份验证 cookie,应该只在用户在本网站浏览时有效。
- 限制:即使用户点击了来自其他站点的链接(比如外部搜索引擎或广告),也不会带上该 cookie。
示例:
http
Set-Cookie: my_cookie=value; SameSite=Strict
2. SameSite=Lax
- 描述:该设置会在大多数情况下仅在同一站点请求时发送 cookie,但允许在某些情况下跨站点请求时也会发送 cookie。例如,当用户点击一个外部网站的链接并跳转到目标网站时,cookie 会被携带。
- 使用场景:适合大多数常见的使用场景,比如保持用户登录状态,防止 CSRF 攻击,又不会完全限制用户的跨站行为。例如,当用户点击外部链接回到你的网站时,可以继续保持会话。
- 限制:不适用于需要严格限制跨站请求的场景。
示例:
http
Set-Cookie: my_cookie=value; SameSite=Lax
3. SameSite=None
- 描述:该设置表示无论请求是否是跨站请求,都会发送 cookie。这个设置必须与
Secure一起使用(即 cookie 只能通过 HTTPS 发送),否则浏览器会拒绝设置。 - 使用场景:当你需要跨站请求时仍然需要携带 cookie,例如,在用户通过第三方网站或嵌入式应用进行身份验证时,cookie 需要在多个站点间共享(例如第三方支付服务或社交媒体授权)。这个设置对于跨站请求和第三方应用的集成非常重要。
- 限制:此选项允许跨站点请求带上 cookie,可能会面临安全风险,因此需要确保使用 HTTPS。
示例:
http
Set-Cookie: my_cookie=value; SameSite=None; Secure
小结:
- SameSite=Strict:严格限制,仅在同一站点请求时发送 cookie。
- SameSite=Lax:大部分情况下在同一站点请求时发送,但在某些情况下允许跨站请求时也会发送 cookie。
- SameSite=None:始终发送 cookie,适用于跨站请求,但必须与
Secure一起使用,且需要 HTTPS。
SameSite 的设定可以帮助提高安全性,特别是防止 CSRF 攻击,但也需要根据实际需求调整策略,避免不必要的限制影响用户体验。