繁体   English   中英

是否可以将IFrame内容在同一域下运行的IFrame中的JavaScript沙盒化?

[英]Is it possible to sandbox JavaScript in an IFrame where the IFrame content is running under the same domain?

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

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

我的查询是是否有一种方法允许脚本在iframe中运行,但不影响包含iFrame的页面?

希望有道理-谢谢!

不,我不这么认为。

如果从相同的域加载iframe,则任何脚本都将具有对该页面的完全访问权限。

所指向页面的重定向是防止其他网站尝试使用页面内容的页面劫持保护。

通过重定向到iframe中,他们可以避免这种情况。

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

或者,您的外部窗口什么也不做,并且与控制窗口位于不同的(子)域。 您的控制窗口是外部窗口中的iframe,重建的外部站点是与控制框架共享相同域的另一个iframe。 现在,如果您的“外部” iframe尝试使用window.top(除导航之外)进行操作,则由于跨域策略而将失败,但是您的控制iframe与“外部” iframe共享相同的域,因此您可以检查并操纵它。

如果使用第二种方法,框架仍将能够浏览顶部窗口。 您可以通过在顶部窗口中添加以下内容来防止这种情况:

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

现在,如果有任何尝试浏览页面的提示,将提示您一个对话框,您可以中止导航。 这可能会单独解决您当前的方法,但是最好将顶部窗口放在单独的域中,以防外部站点尝试对其进行任何意外的处理。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM