浏览器cookie中的SameSite的理解
浏览器中的cookie信息,可以用于保存用户登录某个站点的信息保存,保持其用户验证的状态。但是cookie又是每次随着请求会自动发送到服务器去的,这就给了其他站点发起CSRF攻击和用户追踪的机会。
于是就有了cookie的SameSite属性,用于限制第三方网站的cookie发送机制,具体如下:
1. Strict
最严格的模式,完全禁止跨站点请求时携带cookie,设置为strict之后,跨站行为都不会再携带cookie。
Set-Cookie: name=value; SameSite=Strict;
2.Lax
此模式相对strict模式会宽松一点儿,允许导航到三方网站时携带cookie,即a标签跳转,form表单的get提交,以及link标签的prerender。
Set-Cookie: name=value; SameSite=Lax;
请求方式与是否携带cookie详情请见下表:
请求方式 | 示例 | 常规情况 | Lax模式 |
---|---|---|---|
链接 | <a href="..." ></a> | 发送 | 发送 |
预加载 | <link rel="prerender" href="..." /> | 发送 | 发送 |
form表单 get | <form action="..." method="get"></form> | 发送 | 发送 |
form表单 post | <form action="..." method="post"></form> | 发送 | 不发送 |
iframe | <iframe src="..."></iframe> | 发送 | 不发送 |
ajax | axios.get('...') | 发送 | 不发送 |
image | <img src="..." /> | 发送 | 不发送 |
script | <script src="..."></script> | 发送 | 不发送 |
3.None
使用None显示的关闭SameSite模式控制,但是需要注意的是还需要加上secure,即cookie只会在HTTPS中发送,如果只是设置了SameSite=None
是没有效果的。
Set-Cookie: name=value; SameSite=None; Secure;