快速了解Google Chrome发布的SameSite cookie改动

Cookie 的工作原理

cookie是浏览器设计的一个用来持久化一些简单数据的机制,不同浏览器支持不同数目和大小的cookie,一个cookie实际是一个小的文本文件。

浏览器允许每个域名所包含的cookie数

  • Microsoft指出InternetExplorer8增加cookie限制为每个域名50个,但IE7似乎也允许每个域名50个cookie。

  • Firefox每个域名cookie限制为50个。

  • Opera每个域名cookie限制为30个。

  • Safari/WebKit貌似没有cookie限制。但是如果cookie很多,则会使header大小超过服务器的处理的限制,会导致错误发生

浏览器的cookie大小限制

  • Firefox和Safari允许cookie多达4097个字节,包括名(name)、值(value)和等号。

  • Opera允许cookie多达4096个字节,包括:名(name)、值(value)和等号。

  • Internet Explorer允许cookie多达4095个字节,包括:名(name)、值(value)和等号。

cookie这样工作

  1. server 发送cookie数据给浏览器,完成set-cookie操作,实际上cookie既可以通过服务端设置,也可以通过客户端设置

1.png

2. 浏览器向后台请求数据时会把当前domain的全部cookie都带上(超过了Max-age设置时间的cookie会自动清除)

image

3. 前端可以读取和修改cookie: JS 原生的 API提供了获取cookie的方法:document.cookie,但是如果cookie上设置了httponly,那么这个cookie不能在客户端里被读到,这样可以有效防止xss攻击

第一方cookie 和 第三方cookie

第一方cookie就是直接来自你正在访问的站点,比如我访问www.xxxx.com,那么这个主域下面的cookie都是第一方cookie

第三方cookie是指非访问站点所生产的cookie,可能在访问的过程中加载了第三方的跟踪代码,资源,由第三方站点生产的cookie,比如你访问今日头条,在上面看到淘宝的广告,那么淘宝就有可能你访问的时候添加cookie,这个就是第三方广告Cookie。
第三方Cookie能用于跨域跟踪,通常用在第三方广告的转化跟踪。

Chrome这次改动是什么?

1 chrome浏览器将会在今年晚些的版本中,在默认情况下阻止网站的cookies跨域传输。开发者必须通过手动设置cookie的 samesite 属性,决定是否允许此cookie跨域传输。

2 chrome浏览器将能够提供有关哪些站点正在设置这些cookie的明确信息,以便用户可以对其数据的使用方式做出明智的选择。

3 最终将跨站点cookie传输只能在HTTPS域名起作用。

4 chrome浏览器会采取措施限制各网站获取浏览器的除cookie信息之外的信息。这些信息是由UA,referer请求头等信息组成的。也包含了大量的用户独特信息。chrome形象地称之为“浏览器指纹“

google chrome从v80版本之后将默认使用SameSite属性,如果开发人员明确想允许其Cookie跨网站使用,则必须手动设置cookie的SameSite。仅在单个域上运行的Cookie不会受到影响。

Samesite属性: 这个属性可以让你规定你的cookie是否只能是第一方cookie,防止或允许第三方站点使用

SameSite属性包含三个可能的取值

  • None:允许第三方使用cookie
  • Lax:允许发送安全 HTTP 请求类型( GET , HEAD , OPTIONS , TRACE )第三方链接的 cookies,必须是 TOP-LEVEL 即可引起地址栏变化的跳转方式,其他跳转不会带上cookie;发送不安全 HTTP 方法( POST , PUT , DELETE )类型的http 请求被视为不安全的的请求,禁止携带第三方链接的cookies
  • Strict:只能作为第一方cookie

使用举例:

Set-Cookie: key=value; HttpOnly; SameSite=Strict

为什么这么改?

减少CSRF,xss攻击

前端工程师需要做什么

默认不允许跨网站使用cookie,如果明确想允许其Cookie跨网站使用,则必须手动设置cookie的SameSite为None

Reference Knowledge: 网络攻击CSRF & XSS

Cross-site request forgery (CSRF)

CSRF原理

攻击者盗用了你的身份,以你的名义发送恶意请求。CSRF能够做的事情包括:以你名义发送邮件,发消息,盗取你的账号,甚至于购买商品,虚拟货币转账……造成的问题包括:个人隐私泄露以及财产安全。

image

CSRF防御
  • (1)验证 HTTP Referer 字段:
    根据 HTTP 协议,在 HTTP 头中有一个字段叫 Referer,它记录了该 HTTP 请求的来源地址

  • (2)在请求地址中添加 token 并验证:可以在 HTTP 请求中以参数的形式加入一个随机产生的 token,并在服务器端建立一个拦截器来验证这个 token,如果请求中没有 token 或者 token 内容不正确,则认为可能是 CSRF 攻击而拒绝该请求。

  • (3)在 HTTP 头中自定义属性并验证

XSS

XSS原理

Cross-Site Scripting(跨站脚本攻击)简称 XSS,是一种代码注入攻击。攻击者通过在目标网站上注入恶意脚本,使之在用户的浏览器上运行。利用这些恶意脚本,攻击者可获取用户的敏感信息如 Cookie、SessionID 等,进而危害数据安全。
原理和防范看此篇

https://juejin.im/post/5e37c56df265da3e485b8abd

「点点赞赏,手留余香」

    还没有人赞赏,快来当第一个赞赏的人吧!
JAVA
0 条回复 A 作者 M 管理员
    所有的伟大,都源于一个勇敢的开始!
欢迎您,新朋友,感谢参与互动!欢迎您 {{author}},您在本站有{{commentsCount}}条评论