Google 终于对第三方cookie出手了
2019年2月4号, Chrome 80稳定版(版本号v80.0.3987.87)已正式面向Windows、macOS、Linux、Android和iOS全平台推送,此次更新有很多的改变,但我主要关注里面的cookie政策,这次更新的cookie政策明显是为了满足IETF提案《Incrementally Better Cookies》提出的两个关键更改:
因为原有开放的cookie政策意味着用户容易受到CSRF跨站请求伪造和意外信息泄露的影响,如CSRF可以利用网站漏洞和和用户未退出第三方网站进行攻击,XSS读取第一方cookie造成信息泄露,这些风险可以通过校验规避一些,但为鼓励开发者为可以提供更安全的用户体验,所以IETF提出该提案。
在Chrome 80中,Chrome会将没有声明SameSite值的cookie默认设置为SameSite=Lax;只有采用SameSite=None; Secure设置的cookie可以从外部访问,前提是通过安全连接(即HTTPS)访问。
跟IETFF的填建议是一一对应的,Chrome 80的cookie规则可以拆分成两条:
- 第一个,Cookie默认设置为SameSite=Lax,会禁止第三方cookie的使用
- 第二个,SameSite = None拒绝不安全的的cookie,要使用第三方cookie,Chrome将要求开发人员将第三方Cookie设置为SameSite = None,并将其标记为安全,使用https的安全形式
Chrome 80 预计是在2019年2月份完成更新,Firefox和Edge也会跟进,但没有公布时间表。
什么是SameSite呢?
SameSite是cookie标准的一部分,用于定义cookie如何跨域发送。这是谷歌开发的一种安全机制,用来防止CSRF攻击和用户追踪,none是在2018年才增加上去,目前一共有三个值:strict、lax和none,在2017年11月,Chrome、Firefox、Edge、Safari和Opera支持前两个值,在2019年5月,谷歌公布将未设置Samesite的,统一设置成none,但在Chrome 80,也就是2020年2月后默认是lax。
- Strict:严格模式,表明这个 cookie 在任何情况下都不可能作为第三方 cookie,只有当前网页的 URL 与请求目标一致,才会带上 Cookie。这种情况通常用于只有少数人登录的后台系统。
- Lax:宽松模式,仅当浏览器URL显示的域名和cookie的域名匹配,才发送此有此设置的cookie,这个是chrome 80中cookie的最新默认设置,详见上面规则第一条。
- None:设置为none表示可以跨域发送。
Samesite对第三方cookie的做了限制,所以使用到第三方的cookie,需要根据这个要求去做调整,开发需要工作了。另外使用samesite=lax或samesite=严格的语法就可以防止Cookie被外部服务访问,不用再去校验,更方便。
自从苹果的ITP,Firefox的ETP变得越来越严格,第三方cookie被排挤的节奏了,感觉要放弃它了,确实是的,Google已经宣称在将不支持第三方cookie,但有两年的过渡期。
总结:Chrome对第三方cookie做了更严格的限制,对第一方cookie没有形象,需要主动设置Samesite的值;如果需要使用第三方cookie,那么需要设置为none而且是Secure且通过https发送。