【发布时间】:2009-06-19 18:21:39
【问题描述】:
如果我有一个站点(例如 foo.com)并且在 foo.com 的主页上,有一个图像请求,其中 src=bar.com...,bar.com 域上的 cookie 会是发送到 bar.com 服务器?
【问题讨论】:
如果我有一个站点(例如 foo.com)并且在 foo.com 的主页上,有一个图像请求,其中 src=bar.com...,bar.com 域上的 cookie 会是发送到 bar.com 服务器?
【问题讨论】:
是的。 HTTP 不区分一种资源或另一种资源(图像与 html)。
【讨论】:
cookie 通常会包含在任何类型的请求中,但您描述的场景是所谓的第三方 cookie(也就是说,cookie 设置在不同的域上比加载页面的域),并且大多数浏览器都提供隐私设置来阻止第三方 cookie。
第三方 cookie 允许 bar.com 的所有者在 foo.com 上放置图像(例如横幅广告)并跟踪 foo.com 的用户,即使这些用户从未访问过 bar.com。这是一个隐私问题,许多用户选择阻止此类 cookie。
【讨论】:
如果用户未阻止第三方 cookie,则大多数现代浏览器将在向第三方网站发出请求时设置或发送第三方域的 cookie。 IE 6 有一种不同的阻塞机制,称为 leashing。 wiki:一个 leashed cookie 是一种第三方 cookie,仅在通过相同的第一方访问第三方文档时由浏览器发送。
【讨论】:
这个问题很老,但对我来说是 Google 上的第一个结果,所以我认为有必要澄清一下现在(2021 年)它是如何工作的。
当 bar.com 设置 cookie 时,他们可以指定 SameSite 属性。
如果 cookie 设置为 SameSite=Lax(或未指定 SameSite 属性),则 cookie 不会被发送用于图像请求/iframes/等托管在 bar.com 上,但如果用户单击您的 foo.com 主页上将他们带到 bar.com 的链接,将发送
如果 cookie 设置为 SameSite=Strict,则 cookie 将不会包含在来自其他网站的 bar.com 请求中,包括如果用户点击foo.com 上的 bar.com 链接。
如果 cookie 设置为 SameSite=None,则 cookie 将发送到 bar.com,包括图片请求。
【讨论】:
是的,所有请求都会发送 cookie。 这包括 "img" 和 "script" 以及来自 javascript 的 XMLHttpRquest 调用,并且可能是脚本标签上的安全问题,因为一个网站加载的脚本可以从另一个网站加载脚本,并且也会发送其身份验证 cookie。这可以被利用来窃取数据。
【讨论】:
是的,aspx/js/css/image 请求需要 cookie 验证。
【讨论】: