【问题标题】:What's the point of the Anti-Cross-Domain policy?反跨域政策的意义何在?
【发布时间】:2011-03-07 23:53:18
【问题描述】:

为什么 HTML DOM 和/或 Javascript 的创建者决定禁止跨域请求?

我可以看到禁止它的一些非常小的安全好处,但从长远来看,它似乎是试图使 Javascript 注入攻击的威力更小。无论如何,这对 JSONP 来说都是没有意义的,它只是意味着 javascript 代码更难编写,你必须有服务器端合作(尽管它可能是你自己的服务器)

【问题讨论】:

  • 停止你正在做的任何事情,在你完全理解这个问题之前不要再写一行 HTML 或 Javascript。编写安全代码,第 2 版,第 13 章是有关这些问题的很好的入门读物。

标签: javascript security dom cross-domain same-origin-policy


【解决方案1】:

实际的跨域问题很大。假设 SuperBank.com 内部向http://www.superbank.com/transfer?amount=100&to=123456 发送请求,将 10,000 美元转移到帐号 123456。如果我可以让您访问我的网站,并且您已登录 SuperBank,那么我所要做的就是向 SuperBank 发送 AJAX 请求。 com 将数千美元从您的帐户转移到我的帐户。

JSON-P 可以接受的原因是它几乎不可能被滥用。使用 JSON-P 的网站几乎将数据声明为公共信息,因为这种格式太不方便了,无法以其他方式使用。但如果不清楚数据是否为公共信息,浏览器必须假定它不是。

【讨论】:

  • 好的,我明白你的意思了。为什么他们不这样做,以便跨域的请求不会收到随它一起发送的 cookie?还是比全面禁令更合理一些?
  • @Earlz - 我不确定我是否有完整的答案,但作为一个在白帽黑客方面有相当丰富经验的人,我可以想出一些我可以滥用简单 cookie 的方法- 更少的 AJAX 请求。例如,Google 会在搜索时跟踪您的 IP,如果您发送的请求过多,则会暂时禁止您。即使没有 cookie,我也可以代表您向 Google 发送数千个搜索请求,并诱骗它禁止您。我敢肯定,还有其他服务也可以使用 IP 进行更深入的跟踪,最终可能会泄露敏感数据。
  • @Earlz - 此外,JSON-P 是一个非常强大的选择加入系统,因此不需要其他任何东西。 Adobe 提出了用于 Flash 的 crossdomain.xml,但 HTML/JS 并不真正需要等效的,因为我们已经足够聪明地提出了一个。
  • 您也可以通过不断获取(使用 img 标签或类似标签)带有?timestamp=.. 技巧的页面并同时被禁止来做到这一点。
  • @Earlz - 有趣。只是一个随机的例子。但是,如果我正在制作浏览器,我不会冒险去消除 cookie 是否就足够了。
【解决方案2】:

当允许跨域脚本(或被聪明的 Javascripter 破解)时,一个网页可以访问另一个网页的数据。示例:当您打开 mail.google.com 时,joeblow.com 可以访问您的 Gmail。 joeblow.com 可以读取您的电子邮件、向您的联系人发送垃圾邮件、欺骗您的邮件、删除您的邮件或任何数量的坏事。

【讨论】:

    【解决方案3】:

    将问题中的一些想法澄清到一个特定的用例中..

    跨域策略通常不是为了保护您自己。它是为了保护您网站的用户免受您网站的其他用户 (XSS) 的影响。

    假设您有一个网站,允许人们输入他们想要的任何文本,包括 javascript。一些恶意用户决定在“关于你自己”字段中添加一些 javascript。您网站的用户将浏览他的个人资料并在他们的浏览器上执行此脚本。该脚本代表您的网站执行,因此可以访问您网站的 cookie 等。

    如果浏览器允许跨域通信,则此脚本理论上可以收集您的信息,然后将其上传到恶意用户拥有的服务器。

    【讨论】:

      【解决方案4】:

      这里有一个区别:跨域 AJAX 允许恶意站点让您的浏览器代表它做事,而 JSON-P 允许恶意服务器篡改单个域的页面(并使浏览器做事代表您访问该域),但(至关重要的一点)仅当所提供的页面不适合加载恶意负载时。

      所以,是的,JSON-P 具有一些安全隐患,但它们在使用它们的网站上是严格选择加入的。允许通用的跨域 AJAX 会带来更多的蠕虫。

      【讨论】:

        猜你喜欢
        • 2015-02-06
        • 2023-03-30
        • 2013-10-29
        • 1970-01-01
        • 1970-01-01
        • 2011-02-20
        • 2010-09-09
        • 2019-07-09
        • 2021-03-24
        相关资源
        最近更新 更多