当前位置: 首页 > Web前端 > HTML

腾讯三面:看懂了Cookie的SameSite,那SameParty呢?

时间:2023-03-29 12:21:46 HTML

大家好,我是念念!今天给大家介绍一下三方cookie相关的内容。本文将阐明:什么是三方cookie?什么是同站变更,它对我们的业务有何影响?当您拥有同一站点时,为什么需要同一方?文章首发于我的公众号:每年前端私教的三方cookie是什么?三方指的是非同一个站点。这个同站不同于同源协议中的origin,它的要求比较宽松。同源协议中的源定义为“协议+域名+端口”。如果有一处不同,则不认为是同源,但同一站点仅受域名限制,并不要求完全相同——只要“有效顶级域名+二级域名”即可name"相同,它们都被认为是同一个站点。有效的顶级域是由Mozilla维护的一个表,包括.com、.co.uk、.github.io等。所以ai.taobao.com和www.taobao.com在同一个站点上,因为它们的顶级一级域名(.com)+二级域名(.taobao)是一样的。既然知道什么是网站,那么就很容易区分了:打开开发者工具的应用,域名栏和当前域名的区别就是携带了三方cookie。三方cookie由浏览器自动携带。规则是“不认来源,只看目的”,下面会解释这句话的意思。首先,您需要了解如何发送cookie。服务器会将它们发送到浏览器。方法是在响应头中的set-cookie字段中包含一些配置属性。关键是domain域指定了cookie可以携带哪些域名以备后用。其值可以设置为当前服务器的父域名或自身。比如ai.taobao.com设置的cookie的域名可以是.taobao.com,所有设置值的子域名都可以使用,比如www.taobao.com。如果不设置,则默认为当前域名ai.taobao.com,只有您可以使用。子域名sub.ai.taobao.com不能用,适用范围小很多,所以一般设置。但是不能设置为跨站.baidu.com,也不能是顶级域名.com。其余属性如下:path:指定cookie以后使用时可以携带到合法域名的哪些URI。与domain类似,只能设置为当前路径的父路径或自身,设置值的所有子路径均可访问。expire/max-age:指定cookie的有效期,其中expire为绝对时间,max-age为相对时间,以秒为单位,当两者同时存在时,max-age优先级高;如果两者都不是,那么它就是一个会话级cookie,当用户关闭浏览器时它就会过期。设置Cookie:id=nian;过期=2022年8月30日星期三00:00:00GMT;Max-Age=3600secure:只能在HTTPS环境下传递,携带http-only:禁止客户端脚本通过document.cookie获取cookie,避免XSS攻击。还有下面会说明的same-site和same-partyCookie的携带。上面说了cookie的domain字段很重要。它指定请求携带哪些域名。请注意,这是指请求目的地的域名。比如我先通过responseheader在浏览器中设置一个cookie,域是.a.comset-cookie:id=nian;域名=.a.com;现在有三个请求:网页www.a.com/index.html的前端页面,请求接口www.b.com/api网页www.b.com/index.html,请求接口www.a.com/api网页www.a.com/index.对于html的前端页面,请求接口www.a.com/api有点混乱。你可以停下来思考10秒钟。哪个请求会带上之前设置的cookie?答案是2和3都会带cookie,因为cookie访问规则是看请求的目的地,而2和3的请求是www.a.com/api匹配domain=.a.com规则.这就是“不认来源,只看目的”的意思。不管请求的来源在哪里,只要请求的目的是a站,都会携带cookie。通过这个案例,我们也可以回过头来看:3的情况称为第一方cookie,2的情况称为第三方cookie。限制携带三方cookies“不认来源,只看目的”的规则将在2020年被打破。这一变化体现在浏览器设置same-site:lax为默认属性。chrome的运行比较流畅。目前可以手动设置same-site:none来恢复之前的规则。但是如果在safari中这样设置,就会被认为是same-site:strict。你可以看到所有的第一方cookies都在safari中使用。直观的体验就是登录天猫后,打开淘宝需要重新登录。一次。也就是说,现在cookies的使用是“源头与目的并重”。SameSite上面提到的same-site是cookie的一个属性,限制第三方cookie的携带,其值有none、strict、lax三个值。严格意味着完全禁止三方cookie。这是最严格的保护,可以避免被CSRF攻击,但是缺点也很明显。天猫、淘宝等属于同一实体的网站需要重复登录;none表示完全没有限制。即以往“不认来源,只看用途”的cookie访问原则;松懈是一种妥协。在某些情况下,它会限制第三方cookies的携带,在某些情况下会被允许。这也是浏览器(包括safari)的默认值。在Safari中,same-site的默认值是lax。如果设置为same-site:none,会适得其反。它被视为严格的。SameSite的修改可以这样理解。浏览器调整same-site的默认值从none到laxsame-site:lax的具体规则如下:typeexample是否发送链接发送预加载发送GET表单发送POST表单不发iframe不发AJAXaxios.post不发图片不发and都将在此之前发送。SameSite修改的影响就像一个链接。不受影响,第三方cookie还是会带上。这样可以保证淘宝是从百度搜索打开的,并且有登录状态。但是对大部分业务的影响是巨大的,比如监控埋点系统。埋点监控SDK使用图片的src发送请求。从上表可以看出,改成lax后,默认是不会发送的。此时无法确认用户身份,无法统计UV。埋点监控为什么要用图片的src?之前写过一篇文章很详细。为了解决这些问题,目前大部分公司的解决方案是设置same-site:none并配合secure,就可以和以前一样了。继续携带第三方cookies。但这不是版本答案。上面提到的SameParty,为了绕过浏览器对第三方cookies的限制,保证业务的正常进行,我们的解决方案是将same-site设置回none。但这不是长久之计。首先,浏览器将same-site的默认值由none调整为lax,避免CSRF攻击,保证安全。但是,为了业务的正常运作,我们已经回去了;第二,chrome承诺在2022年,也就是今年,全面禁止三方cookies。到时候就像在Safari中一样,我们将无法再使用这种方式进行hack。如果我们不想使用same-site:none,或者以后不能使用这种方式,same-party将是我们唯一的选择。什么是同党?继续使用阿里巴巴系统的例子。同一方可以将.taobao.com、.tmall.com和.alimama.com这三个站点组合起来,它们所设置的cookies将不被视为本次收集cookies的第三方。首先需要定义First-Partycollection:在.taobao.com、.tmall.com、.alimama.com的服务器下添加一个配置文件,放在/.well-know/目录下,并命名它是第一方设置的。其中一个是“团长”,暂定名为.taobao.com,在其服务器成员下写///.well-know/first-party-set{"owner":".taobao.com","[".tmall.com",".alimama.com"]}另外两个是群成员:///.well-know/first-party-set{"owner":".taobao.com",}和,发送cookies时需要注明同方属性:Set-Cookie:id=nian;同一方;安全的;SameSite=松散;domain=.taobao.com这样,我们打开.tmall.com的网站,AJAX请求.taobao.com就会带上这个cookie,即使当前同站属性不严,因为三个域名在此集合将被视为一个站点,即在浏览器的眼中,此cookie现在是第一方cookie。baidu.com发起的不在集合中的AJAX请求不会被携带。需要注意的是,使用same-party属性时,必须同时使用https(secure属性),不能严格same-site。结语限制第三方cookies是为了浏览器安全,但在国外推广更重要的原因是个人隐私安全。但无论目的是什么,这种变化都会对目前的业务结构产生很大的影响。Same-site:lax成为默认值是一个临时警告,它限制了第三方cookie在某些场景下的使用。我们目前处于软过渡期,因为在大多数浏览器中,我们可以简单地将其调整回same-site:none以删除这些限制并像以前一样工作。但在未来,这个限制将无法取消。同一方是版本的答案。有了它,我们就可以灵活定义哪些站属于业务意义上的“第一方”,哪些是我们想要的“第三方”。》。如果您觉得这篇文章对您有帮助,请点赞关注!您的支持是我创作的动力??