背景
SameSite
属性得到了广泛支持,但不幸的是,它尚未被开发人员广泛采用。开放的默认发送Cookie
到处意味着所有用例都可以使用,但使用户容易受到CSRF
和意外信息泄漏的影响。为了鼓励开发人员陈述其意图并为用户提供更安全的体验,IETF
提案“ 渐进式更好的Cookies” 提出了两个关键更改:
- 没有
SameSite
属性的Cookies
,将被视为SameSite=Lax
。 - 当设置
Cookie
的SameSite=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
所约束的同一站点就是指:同一个二级域名下的各个子域名间的资源属于同一个站点。当然,跨站点就是指不是同一站点的意思。
涉及场景
出现以下情况请及时更新您的SDK
版本
-
您的站点被第三方站点
iframe
的src
所使用。 -
您的应用中有
post form
表单提交到第三方站点。