【问题标题】:Are cookies sent with image requests?cookie 是否与图像请求一起发送?
【发布时间】:2009-06-19 18:21:39
【问题描述】:

如果我有一个站点(例如 foo.com)并且在 foo.com 的主页上,有一个图像请求,其中 src=bar.com...,bar.com 域上的 cookie 会是发送到 bar.com 服务器?

【问题讨论】:

    标签: image cookies request


    【解决方案1】:

    是的。 HTTP 不区分一种资源或另一种资源(图像与 html)。

    【讨论】:

    • 这就是为什么像双击等广告服务器可以通过网络跟踪您的原因。
    • 我已经使用这个事实来设置跨域登录cookie。甚至不接近可靠(只是因为用户可能不会等待您的图像加载),但它确实有效。
    • @ojrac:维基百科(等)也使用图像进行跨域登录,顺便说一句。
    • 技术上这是正确的,但是 Firefox 和 Safari 默认会阻止 3rd 方 cookie,许多广告拦截器也会这样做,并且许多用户更改设置以阻止 3rd 方 cookie,因此实践中的答案是这是不可靠的。
    【解决方案2】:

    cookie 通常会包含在任何类型的请求中,但您描述的场景是所谓的第三方 cookie(也就是说,cookie 设置在不同的域上比加载页面的域),并且大多数浏览器都提供隐私设置来阻止第三方 cookie。

    第三方 cookie 允许 bar.com 的所有者在 foo.com 上放置图像(例如横幅广告)并跟踪 foo.com 的用户,即使这些用户从未访问过 bar.com。这是一个隐私问题,许多用户选择阻止此类 cookie。

    【讨论】:

    • 您如何阻止这些 cookie?
    • @EliTheHuman -- 通常是浏览器设置。例如,在 Chrome 中,在设置 -> 高级 -> 站点设置 -> Cookie 和站点数据下,有一个“阻止第三方 Cookie”的开关。
    • 但是,如果您使用它们本身的图像,是否有办法阻止其他网站放置在您网站上的 cookie?
    • @EliTheHuman -- 不,没有。当您包含来自其他站点的图像或其他内容时,对该图像的请求会直接从用户的 Web 浏览器发送到该其他站点,以便该站点可以将 cookie 发送到该浏览器。为防止这种情况,您必须下载图像并上传到您自己的站点,或者代理图像请求。 (也就是说,您可以设置浏览器将请求发送到的您自己的站点,然后在您的服务器上将请求发送到另一个站点,然后将结果响应传递回浏览器,而无需任何 cookie。)
    【解决方案3】:

    如果用户未阻止第三方 cookie,则大多数现代浏览器将在向第三方网站发出请求时设置或发送第三方域的 cookie。 IE 6 有一种不同的阻塞机制,称为 leashing。 wiki:一个 leashed cookie 是一种第三方 cookie,仅在通过相同的第一方访问第三方文档时由浏览器发送。

    【讨论】:

      【解决方案4】:

      这个问题很老,但对我来说是 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,包括图片请求。

      【讨论】:

        【解决方案5】:

        是的,所有请求都会发送 cookie。 这包括 "img" 和 "script" 以及来自 javascript 的 XMLHttpRquest 调用,并且可能是脚本标签上的安全问题,因为一个网站加载的脚本可以从另一个网站加载脚本,并且也会发送其身份验证 cookie。这可以被利用来窃取数据。

        【讨论】:

        • XMLHttpRequest 是 CORS 保护的对象。
        【解决方案6】:

        是的,aspx/js/css/image 请求需要 cookie 验证。

        【讨论】:

          猜你喜欢
          • 2020-04-28
          • 1970-01-01
          • 2011-03-10
          • 2012-11-28
          • 2013-08-16
          • 2013-09-15
          • 2013-03-31
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多