关于浏览器针对Cookie SameSite属性的cookie发送行为通知

417 阅读2分钟

背景

SameSite属性得到了广泛支持,但不幸的是,它尚未被开发人员广泛采用。开放的默认发送Cookie到处意味着所有用例都可以使用,但使用户容易受到CSRF和意外信息泄漏的影响。为了鼓励开发人员陈述其意图并为用户提供更安全的体验,IETF提案“ 渐进式更好的Cookies” 提出了两个关键更改:

  1. 没有SameSite属性的Cookies,将被视为SameSite=Lax
  2. 当设置CookieSameSite=None也必须指定Secure

Chrome自80版本起就实现了这些行为 。Firefox 将对其进行测试,并将在将来将其作为默认行为。 Edge 还计划更改其默认行为。

这意味着: 只有当跨站请求设置为“SameSite=None”和“Secure”时,才会发送cookie

SameSite 接受下面三个值:

Lax: Cookies允许与顶级导航一起发送,并将与第三方网站发起的GET请求一起发送。这是浏览器中的默认值。

Strict: Cookies只会在第一方上下文中发送,不会与第三方网站发起的请求一起发送。

None: Cookie将在所有上下文中发送,即允许跨域发送。

何为跨站点

跨站点和跨域是两个不同概念,具体跨域的概念可以自行去学习。

首先是Public Suffix List列举了所有的顶级域名后缀,如:

  • .dev
  • .com
  • .github.io

那么同一站点就是指顶级域名后缀加上后缀之前的那一部分域名,如:

  • web.dev
  • xxx.github.io

在绝大部分的情况下,我们可以将同一站点简单理解为常说的 二级域名,所以,samesite所约束的同一站点就是指:同一个二级域名下的各个子域名间的资源属于同一个站点。当然,跨站点就是指不是同一站点的意思。

涉及场景

低版本浏览器调试(chrome://flags/#same-site-by-default-cookies

出现以下情况请及时更新您的SDK版本

  1. 您的站点被第三方站点iframesrc所使用。

  2. 您的应用中有post form表单提交到第三方站点。

参考文档:

developer.mozilla.org/zh-CN/docs/…