是否可以在IFrame内容在同一域下运行的IFrame中使用沙箱?

时间:2010-11-11 09:40:30

标签: javascript iframe

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

问题是某些网页上的脚本会重定向到iframe,这会阻止我们的工具停止工作。

我的疑问是,是否有办法允许脚本在iframe中运行,但不影响包含iFrame的网页?

希望有道理 - 谢谢!

2 个答案:

答案 0 :(得分:1)

不,我不这么认为。

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

您引用的页面重定向是Hijacking的页面保护,其他网站尝试使用该页面内容。

通过取消iframe,他们可以避免这种情况。

答案 1 :(得分:0)

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

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

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

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

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