关于cookie的SameSite

229 阅读2分钟

首先我们需要知道cookie是什么

cookie是服务器发送到用户浏览器并保存在本地的一小块数据,它会在浏览器下次向同一服务器再发起请求时被携带并发送到服务器上。通常,它用于告知服务端两个请求是否来自同一浏览器,如保持用户的登录状态。Cookie 使基于无状态的HTTP协议记录稳定的状态信息成为了可能。(抄送自MDN-HTTP Cookies)

然后我们再来聊聊SameSite

SameSite Cookie 允许服务器要求某个 cookie 在跨站请求时不会被发送,(其中 Site 由可注册域定义),从而可以阻止跨站请求伪造攻击(CSRF)

服务端设置

Set-Cookie: key=value; SameSite=Strict/Lax/None

  • None 无论是否跨站都会发送 Cookie
  • Strict 浏览器将只在访问相同站点时发送 cookie。
  • Lax 与 Strict 类似,但用户从外部站点导航至URL时(例如通过链接)除外

对于Strict来说,就好比假如你已经登录过淘宝网站了,然后在别的网址看到了某件淘宝正在热卖的商品,想点进去购买的时候发现显示你并没有登录,那么有可能是淘宝验证登录状态的cookie设置了SameSite:Strict,防御了黑客想利用你的身份在淘宝去买东西。

那么对于这种情况下来说,如果设置为SameSite:Lax的话,也许对于用户来说确实体验是比较好的。大多数情况下不发送第三方Cookie,但是预加载、get请求和链接形式还是会携带的。

在上面我们提到了跨站请求,那么什么是跨站。

跨站跨域不一样。

跨域是指:协议、域名、端口号之一不相同,则跨域。 跨站是指:两个 URL 的 eTLD+1 不相同,不需要考虑协议和端口。

那么eTLD+1又是什么。其中,eTLD 表示有效顶级域名,注册于 Mozilla 维护的公共后缀列表(Public Suffix List)中,例如,.com、.co、.uk、.github.io 等。而 eTLD+1 则表示,有效顶级域名+二级域名,例如taobao.com等。

比如说www.baidu.com和www.taobao.com是跨站,其中的有效顶级域名+二级域名分别是: baidu.com和taobao.com,它们不相同,所以跨站。

比如说www.lgowen.taobao.com和www.yawen.taobao.com是同站,其中的有效顶级域名+二级域名都是taobao.com

先聊到这吧,以上大多数都是参考得来的结果。 如果有侵权,请联系我。谢谢各位互相监督学习。