【问题标题】:Is it possible to sandbox JavaScript in an IFrame where the IFrame content is running under the same domain?是否可以在 IFrame 内容在同一域下运行的 IFrame 中对 JavaScript 进行沙箱处理?
【发布时间】:2010-11-11 09:40:29
【问题描述】:

我们有一个应用程序可以在我们的域内重建 Iframe 中的外部网站,因此我们可以使用在浏览器中运行的工具来检查外部网站。这是一个不可避免的要求,因为我们需要使用 JavaScript 收集有关外部页面的信息。如果页面不是从我们的域中重建的,我们就会遇到跨站脚本问题。

问题是某些页面上的脚本重定向到 iframe 之外,这会导致我们的工具无法工作。

我的问题是是否有办法让脚本在 iframe 中运行,但不影响包含 iFrame 的页面?

希望这是有道理的 - 谢谢!

【问题讨论】:

    标签: javascript iframe


    【解决方案1】:

    不,我不这么认为。

    如果 iframe 是从同一域加载的,则任何脚本都可以完全访问该页面。

    您所引用页面的重定向是页面保护免受劫持,另一个站点试图使用页面内容。

    通过从 iframe 中重定向出来,他们避免了这种情况。

    【讨论】:

      【解决方案2】:

      您可以尝试使用单独的窗口 (window.open) 来加载重建的外部网站,而不是 iframe。只要它们在同一个域中,它们仍然可以通信,但子窗口不太可能与您的主窗口混淆。

      或者,您的外部窗口不能执行任何操作,并且位于与您的控制窗口不同的(子)域中。您的控制窗口是外部窗口中的 iframe,重建的外部站点是与您的控制框架共享同一域的另一个 iframe。现在,如果您的“外部”iframe 尝试对 window.top 执行某些操作(除了导航),它将由于跨域策略而失败,但您的控制 iframe 将与您的“外部”iframe 共享同一个域,因此您可以检查并对其进行操作。

      如果您使用第二种方法,框架仍然可以在顶部窗口中导航。您可以通过在顶部窗口中添加类似这样的内容来防止它:

      window.onbeforeunload = function(){return '';};
      

      现在,如果有任何内容试图导航页面,系统会提示您一个对话框,您可以中止导航。这可能会自行修复您当前的方法,但最好将顶部窗口放在单独的域中,以防外部站点尝试对其进行任何意外的操作。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2015-06-08
        • 2011-11-20
        • 2021-11-24
        • 1970-01-01
        • 1970-01-01
        • 2010-12-17
        • 2014-03-02
        • 1970-01-01
        相关资源
        最近更新 更多