明天在 chrome 浏览器中察看申请信息时发现了这样一个正告:
咦,看起来像是阻止了我的 cookie 发送。通过查问方知,原来谷歌为了避免 CSRF 攻打,曾经逐渐开始启用 SameSite 这个 cookie 属性,以更强制的伎俩来升高 CSRF 的危险。而这个个性从 76 版本后,就曾经开始逐渐退出到 chrome 稳定版当中了。我看了下本人的 chrome,赫,都曾经 84 版了,必然命中这个个性了。
咱们去 chrome 开发工具里看一下 cookie 的属性家族。哇看起来,cookie 属性家族真是越来越宏大了:
SameSite 是干嘛的
咱们来看下 sameSite 到底是个什么鬼货色。从 MDN 文档能够看到:samesite 能够阻止浏览器在跨域申请里携带 cookie。
在默认状况下,该属性的值是 Lax
,即松散的意思,这个所谓的松散绝对于以前来说其实并不松散,它是 只容许 GET 跨域申请携带
另外一个值是 strict
,即严格模式,严格标记将阻止 cookie 被浏览器发送到所有跨域指标网站,即便是惯例的 GET 申请。
怎么绕过这个限度呢
尽管绕过是不平安的。然而有些场景是没有太严格的要求的,例如统计日志数据的 cgi。除了上述 2 个值之外,还能够将他申明为 none
。通过显式申明 SameSite = None,开发人员依然能够不受限制的应用跨域 cookie。
浏览器反对状况
从 Chrome 76 开始,通过启用默认默认 cookie 标记,该性能将可用。从 2020 年 7 月 14 日开始,此性能将逐渐向 Stable 用户推出。但 MacOS 上还有 BUG(如果设置为 none,成果会变成 strict)。另外一个 bug 就是我本人电脑上加上 samesite 进行设置 cookie 是有效的,目前还不分明起因,如果有大佬晓得为啥不失效,还请心愿大佬赐教。