绕过iframe沙箱?

26

有人正在使用iframe嵌入我的网站

<iframe src="http://example.org" sandbox=""></iframe> 

通过使用沙盒属性,我的网站无法在其中使用iframe阻止器。并且它可以轻松地被嵌入。

我的网站上的框架破坏程序:

if (window.top !== window.self) window.top.location.replace(window.self.location.href);

当使用sandbox属性时,是否有编程的方法重定向到我的网站,当它被嵌入框架中时?


除了其他选项外,您可能还考虑使用X-Frame-Options HTTP响应头 - Palpatim
有关 iframe 和 framekiller 的更多信息维基百科iFrame Attribute - html5 & Security - yjs
4个回答

18

通过设置响应头X-Frame-Options的值为DENYSAMEORIGIN,可以保护Iframing,从而防止点击劫持攻击。这样的响应头设置可以保护你的网站免受Iframing或点击劫持攻击。

一旦设置了X-Frame-Options响应头,浏览器会收到标准信息,如"此内容无法在框架中显示"。


使用那个代码,它不会正确显示我的页面吧?但是我加粗了文本,我希望它能重定向到我的页面。 - user198989
当X-Frame-Options响应头设置为“deny”或“sameorigin”时,浏览器无法接收任何正确的HTML或脚本,因此无法通过脚本进行重定向。 - Sudipta Kumar Maiti

11
sandbox属性会关闭所有javascript等内容。这就是为什么你的frame buster不起作用,以及任何其他人提供的javascript也无法使用。

W3对sandbox说:

  • 在iframe内禁止/禁用脚本
  • 在iframe内禁止/禁用链接到其他浏览上下文的链接
测试显示该属性还会禁用meta重定向和任何打破iframe的标准链接。 考虑到这种严格性,如果可以进行重定向,那将违背沙箱的初衷,我认为很难实现。 最好的建议是使用noscript标签向在沙箱iframe中查看页面的用户显示消息。您可以为此样式化标签以隐藏内容。 (如果只有一个站点存在问题,则使用htaccess阻止它们可能是更好的方法)

另一个人使用了sandbox="allow-scripts",因此我们可以运行JavaScript。如果要重定向到主嵌入站点,最好的方法是什么? - user198989
他们需要允许顶部导航才能使其工作。 allow-scripts也不允许离开iframe。 - RichardB
如果也加入了那个,重定向的方法是什么? - user198989
我猜你需要为每个可能的结果设置备选方案。1. 重定向 - 适用于普通的iframe 2. 使用JavaScript显示消息,说明它不能在iframe中查看,并访问您的网站 - 适用于允许脚本的情况,以及3. 完整沙盒的noscript版本。2和3对用户体验不是很好,但如果您不想完全阻止iframe,则真的想不到更好的方法。 - RichardB
我真的不认为你可以重定向2或3个(嗯,如果你右键点击并且用户指定在新窗口中打开,似乎2个是可行的)。你能做的只是给他们一个链接让他们复制和粘贴。 - RichardB
显示剩余2条评论

2
我认为最好的做法是使用 target="top" 链接来展示你自己的消息。sandbox 属性的整个概念是禁止重定向。没有方法可以绕过这一点,如果你找到了一种方法,浏览器制造商很可能会采取措施阻止它。这显然是他们的意图。
这就是网络的工作方式。当涉及到浏览器时,你不能随心所欲地做任何事情。

1

@SudiptaKumarMaiti的回答是正确的,但是现在已经被安全内容策略(CSP)第二级所取代,具体来说是frame-ancestorsdirective

如果要完全禁止框架嵌入(类似于X-Frame-Options: DENY),请使用此HTTP头:

Content-Security-Policy: frame-ancestors 'none';

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