大家好,我是念念!今天给大家介绍一下三方cookie相关的内容。本文将阐明:什么是三方cookie?same-site有哪些变化,对我们的业务有什么影响?为什么?还需要同地同方吗?什么是三方cookie?三方指的是非同一个站点。这个同站不同于同源协议中的origin,它的要求比较宽松。同源协议中的源定义为“协议+域名+端口”。如果有一处不同,则不认为是同源,但同一站点仅受域名限制,并不要求完全相同——只要“有效顶级域名+二级域名”即可name"相同,它们都被认为是同一个站点。有效的顶级域是由Mozilla维护的一个表,包括.com、.co.uk、.github.io等。所以ai.taobao.com和www.taobao.com在同一个站点上,因为它们的顶级一级域名(.com)+二级域名(.taobao)是一样的。知道什么是网站后,就很容易区分了:打开开发者工具的应用,domain栏显示是不同于当前域名的三方cookie。如何携带第三方cookiescookies的携带是浏览器的自动操作。规则是“不认来源,只看目的”。下面将解释这句话的含义。首先,您需要了解cookie的传送。服务器将通过响应头中的set-cookie字段将它们发送给浏览器。它还包括一些配置属性,关键是域。domain指定以后使用cookie时可以携带到哪些域名。其值可以设置为当前服务器的父域名或自身。比如ai.taobao.com设置的cookie的域名可以是.taobao.com,所有设置值的子域名都可以使用,比如www.taobao.com。如果不设置,则默认为当前域名ai.taobao.com,只有您可以使用。子域名sub.ai.taobao.com不能用,适用范围小很多,所以一般设置。但是不能设置为跨站.baidu.com,也不能是顶级域名.com。其余属性如下:1.path:指定cookie以后使用时可以携带到合法域名的哪些URI。与domain类似,只能设置为当前路径的父路径或自身,设置值的所有子路径均可访问。2.expire/max-age:指定cookie的有效期,其中expire为绝对时间,max-age为相对时间,单位为秒。当两者同时存在时,max-age具有更高的优先级;如果两者都不是,则它是一个会话级cookie,它会在用户关闭浏览器时过期。设置Cookie:id=nian;过期=2022年8月30日星期三00:00:00GMT;Max-Age=36003.secure:只能在HTTPS环境下发布和携带。4、http-only:禁止客户端脚本通过document.cookie获取cookie,避免XSS攻击。5.还有same-site和same-party下面会说明。Cookie的携带上面说了cookie的domain字段很重要。它指定请求携带哪些域名。请注意,这是指请求目的地的域名。比如我先通过responseheader在浏览器中设置了一个cookie,域是.a.com。设置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都会带cookies,因为使用cookies的规则是看请求的目的地,而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。可以看出,safari中使用的都是第一方cookie。直观的感受是,登录天猫打开淘宝后,需要重新登录。也就是说,现在cookies的使用是“源头与目的并重”。SameSite上面提到的same-site是cookie的一个属性,限制第三方cookie的携带,其值有none、strict、lax三个值。严格意味着完全禁止三方cookie。这是最严格的保护,可以避免CSRF攻击,但缺点也很明显。天猫、淘宝等同一实体运营的网站需要重复登录。none表示完全没有限制,也就是之前“不认来源,只看用途”的cookie访问原则。松懈是一种妥协。在某些情况下,它会限制第三方cookies的携带,在某些情况下会被允许。这也是浏览器(包括safari)的默认值。在Safari中,same-site的默认值是lax。如果设置为same-site:none,会适得其反,会被当成strict。SameSite的修改可以这样理解。浏览器将same-site的默认值从none调整为lax。same-site:lax的具体规则如下:在此之前,全部发送。SameSite修改的影响就像一个链接。不受影响,第三方cookie还是会带上。这样可以保证淘宝是从百度搜索打开的,并且有登录状态。但是对大部分业务的影响是巨大的,比如监控埋点系统。埋点监控SDK使用图片的src发送请求。从上表可以看出,改成lax后,默认是不会发送的。此时无法确认用户身份,无法统计UV。埋点监控为什么要用图片的src?之前详细写过一篇文章,点这里。为了解决这些问题,目前大部分公司的解决方案是设置same-site:none并配合secure,这样就可以像以前一样继续携带第三方cookie。但这不是版本答案。上面提到的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","members":[".tmall.com",".alimama.com"]}另外两个是组member:///.well-know/first-party-set{"owner":".taobao.com",}并且发送cookie时需要注明同方属性:Set-Cookie:id=年;同一方;安全的;SameSite=松散;domain=.taobao.com这样,当我们打开.tmall.com网站,向.taobao.com发起AJAX请求时,会带上这个cookie,即使当前same-site属性很松,因为这三者在这个集合中的域名将被视为一个站点,也就是说,在浏览器的眼中,这个cookie现在是第一方cookie。baidu.com发起的不在集合中的AJAX请求不会被携带。需要注意的是,使用same-party属性时,必须同时使用https(secure属性),不能严格same-site。结语限制第三方cookies是为了浏览器安全,但在国外推广更重要的原因是个人隐私安全。但无论目的是什么,这种变化都会对目前的业务结构产生很大的影响。Same-site:lax成为默认值是一个临时警告,它限制了第三方cookie在某些场景下的使用。我们目前处于软过渡期,因为在大多数浏览器中,我们可以简单地将其调整回same-site:none以删除这些限制并像以前一样工作。但在未来,这个限制将无法取消。同一方是版本的答案。有了它,我们就可以灵活定义哪些站属于业务意义上的“第一方”,哪些是我们想要的“第三方”。”。
