【问题标题】:JavaScript and third party cookiesJavaScript 和第三方 cookie
【发布时间】:2011-03-22 18:23:52
【问题描述】:

假设有一个站点 foo.com 从站点 bar.com 加载 JavaScript。现在,假设来自站点 bar.com 的 JavaScript 尝试使用 document.cookies 读取 cookie。我的印象是,使用 JavaScript,您可以读取浏览器中设置的所有 cookie,无论其来源如何。但事实证明,来自站点 bar.com 的 JavaScript 只能访问由 bar.com 设置的 cookie,而不能访问其他任何 cookie。如果是这样,窃取cookies的脚本注入攻击是如何进行的?

【问题讨论】:

    标签: javascript cookies cross-domain


    【解决方案1】:

    但事实证明,来自 bar.com 站点的 JavaScript 只能访问 bar.com 设置的 cookie,而不能访问其他任何 cookie。

    这不是真的。重要的是包含<script> 元素的HTML 文档在哪里,而不是<script> 在src 属性中提到的JS 文件的URL。

    我怀疑您的问题是当属性被称为document.cookie 时您正在访问document.cookies单数!

    【讨论】:

    • 这也是 CDN 的工作方式,例如在此站点上加载的 jQuery 脚本:http://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.min.js 不在域 stackoverflow.com 上。
    • @David,cookie 是输入问题时的拼写错误。我刚刚尝试使用 alert(document.cookie) ,尽管设置了 cookie,但我还是得到了一个空白字符串。我很困惑。
    • 我进行了测试。域没有什么不同。也许您尝试获取的 cookie 位于不同的路径上,或者设置为仅 HTTP。
    • 库克不仅仅是http。站点 foo.com 包含来自站点 moo.bar.com 的脚本,并且 cookie 设置为域 bar.com(不是 moo.bar.com),路径为 /。这是我正在测试的场景,我无法读取 cookie。
    • 糟糕。知道了。在 cookie 窃取中,情况正好相反。驻留在 foo.com 中的 bar.com 脚本尝试从 foo.com 本身而不是 bar.com 读取 cookie。谢谢。堵住了我理解的漏洞。
    【解决方案2】:

    他们在被攻击的页面内部加载脚本。

    例如,当博客系统中的 cmets 受到攻击时,它们会包含一个 script 元素,该元素会在页面呈现时执行。该脚本可以获取cookie并将其发送到攻击者的服务器。

    这就是为什么您应该从不信任用户输入并在 cmets 中至少禁止某些标签(或将每个 < 转换为 <)。但是不要在客户端这样做,因为这种预防技术很容易被规避;在服务器端测试(并更改)恶意输入。

    【讨论】:

      【解决方案3】:

      您只能访问已为给定域名设置的 cookie。来自Wikipedia article on cookies

      除了名称/值对之外,还有一个 cookie 还可能包含到期日期、 路径、域名以及是否 cookie 仅用于加密 连接。 RFC 2965 要求使用 cookie 有一个版本号,但这是 通常省略。这些数据 遵循 name=newvalue 对并且是 用分号隔开。例如, 服务器可以创建一个cookie 通过发送一行 Set-Cookie: 名称=新值;过期=日期;路径=/; 域=.example.org。

      域名和 path 告诉浏览器 cookie 必须在何时发送回服务器 请求给定域的 URL 和 小路。如果未指定,则默认为 到对象的域和路径 这是要求的。结果, 域和路径字符串可能会告诉 浏览器发送cookie时 通常不会。为了安全 原因,cookie 仅被接受 如果服务器是 域字符串指定的域。

      如果foo.com 发送了一个域名为bar.com 甚至.com 的cookie,那么bar.com 上的JavaSCript 代码可以读取该cookie。然而,大多数浏览器被配置为仅在域名匹配时接受 cookie,并且会拒绝这样的 cookie。

      【讨论】:

      • 我验证了 cookie 存在,但 JavaScript 无法读取它。
      猜你喜欢
      • 2020-10-13
      • 2014-11-09
      • 2018-11-25
      • 1970-01-01
      • 2011-02-03
      • 2012-08-19
      • 2010-10-11
      • 1970-01-01
      • 2011-06-23
      相关资源
      最近更新 更多