Samesite cookie属性旨在防御CSRF攻击,但目前不考虑该网站的方案。这最初是为了在转换到HTTPS期间帮助站点,但它会导致同一主机的安全和不安全版本被视为同一站点。因此,网络攻击者可以冒充http://site.example,并使用它绕过https://site.example上的samesite保护。在这种安全漏洞和HTTPS的使用之间显着增加,我们认为现在是时候改变这个定义了。
Web生态系统已经在此方向上与HTML规范一起移动,并使用相同站点的新定义和利用它的正在进行的W3C Ping隐私威胁模型进行了更新。
以下是两个场景:第一个说明Samesite cookie属性(特别严格在此示例中)如何保护CSRF,第二个示出了如何"方面的同一网站"增强这种保护。
攻击者向您发送一封电子邮件,声称您赢得了追逐戏剧。如果访问网站并单击按钮,您需要做的就是这样做。您决定此感觉合法并访问网站https://mega-sweepstakes.example。该网站有一个很大的有吸引力的纽扣,催促你点击它,但是,Unbeknst给你,按钮并在' t声称你的奖品。相反,它与您的银行联系在一起,以及询问银行将您的资金转移到攻击者的查询参数:https://bank.example/transfer/custom?from = check-conc-slush -Fund& AMT = 1000。哦,您最近登录了您的银行帐户,以便您的登录cookie仍然有效。
如果您的银行' s cookie don' t有samesite = strict属性,然后单击该链接将导致浏览器导航到您的银行和#39; s站点,沿着您的登录饼干发送,导致您为1000美元穷人。
如果您的银行' s cookie有samesite = strict属性,那么单击该链接不会导致浏览器沿着您的登录cookie发送,因为Mega-Sweepstakes.example isn' t与bank.example相同的网站,您的支票账户是安全的。
但是,如果攻击者是人的联系,那么怎么办?如果您决定访问http://bank.example,则攻击者可以修改页面上的每个链接以指向https://bank.example/transfer/custom?from = check& =邪恶 - inc-slush-fund& AMT = 1000。甚至samesite =严格的worln' t保护你是bank.example和bank.example是同一个网站。
Enter"方案同一站点"通过考虑方案和注册域,我们可以看到http://bank.example和https://bank.example不一样,因此不一样-地点。这意味着浏览器不会发送Samesite =严格的cookie,因此不会登录,传输尝试失败。
在用户代理中修改同一站点和#39;在用户代理中考虑以不同的方案作为跨站点的起源。因此,https://site.example和http://site.example现在将被视为跨站点。
保护用户免受CSRF攻击的安全起源,这些攻击由不安全的起源与同一领域进行的。
该提案没有解决薄弱的机密性或弱曲线完整性,特别是在方案隔离的背景下。这意味着安全和不安全的起源都将保留对同一组饼干的访问。 IE,如果用户访问http://site.example,则使用http://site.example/image.jpg和响应设置cookie,然后在该用户访问https://site.example到https:// site.example / image.jpg仍将发送同一个cookie。
在此上下文中的“交叉方案”意味着宗旨是易于同样的网站,但具有不同的方案。例如,http://site.example和https://site.example被视为跨方案。
samesite = lax和samesite =严格的cookie将不再以交叉方案子源请求,即http-to-https和https-to-http(混合内容),无论http请求方法如何。
例如,用户在http://messageboard.example上写出论坛帖子。当用户单击提交后请求将发送到https://messageboard.example/submit,但是,论坛登录cookie,标有samesite = lax,不会发送,并且用户的帖子将失败。
对交叉方案子资源的要求将不再发送Samesite = LAX或Samesite =严格的饼干。类似地,来自交叉方案子资源源的响应将不再能够设置这些饼干。
例如,如果http://site.example嵌入来自https://site.example,samesite = lax和samesite = start cookie将不再向https://site.example以及任何响应中的这种饼干将被忽略。
在&#34之前;方案相同的站点&#34 ;:如果有多个嵌套的iframes,如果其中任何祖先是跨站点(到顶部 - 级别框架)。与"方面的相同站点"如果任何祖先iframe是跨方案(到顶级帧),现在可以发生这种情况。
使用Sandbox属性的任何Iframe始终是跨站点(到顶级帧)。这里没有任何改变。
获取SRC属性指定的内容的请求被视为任何其他子资源请求,并影响相同的方式。加载IFRame' s内容,它作为跨站点或同一站点运行,具体取决于原点生成的文档(这通常是SRC属性值的原点)。
例如,对Iframe' s页面的以下请求不会发送Samesite = lax也不发送samesite =严格的cookie(也不会将其响应设置这些饼干)作为它和#39; s交叉方案。在IF rame'已加载页面后,它无法访问那些Samesite Cookie,因为它是横向网站运行的'
通过srcdoc属性加载到iframe中的内容继承了其父级' s原点。因此它具有相同的"方面的Sypenful-site"限制(或缺乏其)作为其父文档。
通过SRC属性获取脚本的请求被视为任何其他子资源请求,并影响相同的方式。
例如,对脚本的以下请求不会发送Samesite = LAX和Samesite =严格的cookie(其响应也不能设置这些cookie)。
脚本作为父文档的一部分执行,因此它们具有相同的"方面的相同网站"限制(或缺乏其)作为他们的母体文件。
这可能会影响将脚本加载到跨方案iframe中的网站。由于横穿方案iframe,这样的脚本将作为跨站点运行,并且无法访问Samesite = LAX和Samesite = STRICT Cookie .Cookie。
例如,以下都是下面的< script> s将能够访问samesite = lax和samesite =严格的饼干。但是,嵌入在iframe页面中的脚本将无法作为iframe是跨站点。
< html gt;< body>< h1>此页面托管在http://website.example/insecure.html& lml&gml& ltml; // h1> //这个脚本使用document.cookie做事...... 。< / script>< script src =" https://website.example/script-that-accesses-samessite-cookies.js& #34;>>>>>>< / script>> #34; https://website.example/iframe-with-js.html"标题="嵌入脚本的iframe">< / iframe>< / body>< / html>
"方面的Squide-Sides-site"和#34;方案结合的饼干"既试图将cookie靠近基于原始的安全模型;这两个提议相互补充,一个不是另一个的子集。
"方面的相同站点"以及当前版本的同一网站,涉及Cookie将被发送或接收的上下文,特此称为"同一网站上下文&# 34; "同一网站上下文"可以被认为是问题&#34的答案;是请求网址与一个I' m上的网站吗?"更具体地说"是请求URL'相同的网站'或'横向网站'与当前的网站I' m上?""网站I' m"通常是浏览器中所示的一个地址栏(当然,例外,但它们'' extepting the point)。
在当前的世界里,"同一网站上下文"通过检查注册域来确定:http://site1.example与http://site2.example无法相同的站点,但http://site1.example和https://site1.example会是同一个站点.with"方面的sident-site"我们现在考虑该方案以及注册域:http://site1.example是跨站点,与http://site2.example,http://site1.example也是跨网站的https://site1.example,但https://site1.example与https://site1.example是相同的站点。
"方案约束的饼干"关注URL的方案,Cookie正在发送或设置。当前世界的回复来自https://site.example/resource.jpg可以设置cookie:set-cookie:mycookie = value.that然后可以将cookie发送到与" site.example&#34的任何URL;作为主机,无论方案如何:http://site.example/otherresource.jpg,https://site.example/somethingelse.jpg等。
与"方案约束的饼干"浏览器将不再将cookie发送到不同的方案,而不是设置它的方案。在这一点上:来自https的响应://site.example/resource.jpg设置cookie:set-cookie:mycookie =值。该cookie现在只能发送到安全的URL:https://site.example。这包括不同的站点,http:// hott.example,嵌入来自site.example:http://site.example/otherresource.jpg将不会发送cookie,https://site.example/somethingelse .jpg将发送cookie。
"方面的Squide-Sides-site"影响上下文cookie将被发送/设置。"这个网址是否与I'我在审议方案的情况下是一个I&#39的网站吗?"
“方案绑定的cookie”影响Cookie将发送到的方案类型。 "请求URL的方案是否符合设置此cookie的原始问题,响应,响应的url?"
这个例子展示了它' s可能有一个情况,其中曲奇饼"方面的sident-site"和#34;方案约束的饼干"每次发送都可能有所不同。
用户导航到https://website.example,其中包含想要设置和读取cookie的一些嵌入式资源。
然后,用户导航到http://website.example,它与以前相同的页面,通过不安全的连接服务。
浏览器检查它是否可以在Http://website.example/readsacookie.jpg请求上发送cookie
在当前的世界(没有任何一个提议)中,允许这个cookie作为&#34发送。同一网站上下文"是同一个网站:只有可注册域事实和它们匹配。
“方面的同址站点”还将允许此cookie作为&#34发送;同型网站上下文"考虑方案时仍然是同一个网站:用户在http://website.example上,cookie想要发送到http://website.example
“方案绑定的cookie”不允许将此cookie作为方案发送,如同' t与cookie设置的同样:cookie由https设置,并尝试发送到http。
浏览器还检查它是否可以在HTTPS的请求中发送cookie://website.example/readsacookie2.jpg
在目前的世界中,允许Cookie作为&#34发送。同样的上下文"是同一个网站:可注册域匹配。
“方面的同址站点”不会让这个cookie作为&#34被发送为"同一网站上下文"现在是横向网站:用户在http://website.example上,并且cookie想要发送到https://website.example。
“方案约束cookie”将允许此cookie作为方案与Cookie设置的相同:Cookie由HTTPS设置,并尝试发送到HTTPS。
最后,用户导航到不同的网站https://othersite.example,它嵌入https://website.example/readsacookie2.jpg;浏览器检查它是否可以在该子资源的请求中发送cookie
在目前的世界中,饼干不允许作为&#34发送。同型网站上下文"是横向网站:注册域名Don' t匹配
“方面的同址站点”不会让这个cookie作为&#34被发送为"同一网站上下文"是横向网站:可注册域名Don' t匹配。
"方案约束的饼干"将允许此Cookie作为方案发送,因为该方案与Cookie设置的同样:Cookie由HTTPS设置,并尝试发送到HTTPS。 (它很重要的是要注意,即使"方案约束的cookie"规则允许将此cookie发送它仍将被浏览器阻止由于站点规则。)
是的。 "方面的Sypenful Syest-site" 是提案' s name,"方案samesite" 偶尔使用。 我们鼓励"方面的Syper-stain" 拼写。