如何确定通过iframe加载的页面是否在沙箱中?

3

我想检测页面是否通过沙盒iframe加载。这可行吗?

例如,我们提供自定义嵌入式小部件,有些人认为通过在其iframe中使用沙盒技术是一种聪明的做法,但这会破坏某些功能,比如window.top.location

显然,他们可以启用我们需要的功能,但理想情况下,我应该能够像这样做:

"sandbox" in window.top

我也尝试过做这件事

try {
    // do something that would not work if within sandbox
} catch(e) {

}

但是这并不起作用,因为它是浏览器安全错误,与javascript无关。JSFiddle实际上将它们的iframes隔离以防止window.top.location导航,所以这将是一个很好的例子来展示。如果您查看此处的示例:http://jsfiddle.net/mwsb8geL/show/,当您按下即时预订在线按钮时,您可以看到错误信息。请参考以下图片: enter image description here

是的,它们是非常相似的问题。我们都想知道当前页面是否在沙盒环境中执行。这两个问题都还没有答案。我已经寻找了解决方案,等我有机会时我会阅读规范。 - Layke
1个回答

2
一个名为sandblaster的项目可以帮助你检测是否被沙盒化。
在测试沙盒的iframe中,打开脚本标签并粘贴以下内容:https://raw.githubusercontent.com/JamesMGreene/sandblaster/master/dist/sandblaster.js。这是由于安全问题所需。
之后,只需要简单地执行以下操作即可。
var result = sandblaster.detect();
if(result.sandboxed === true) {
    //sandboxed
}

这是我为另一个答案制作的演示,它显示了解决方案可行。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接