防止iframe更改父位置

时间:2012-03-30 16:36:43

标签: javascript html iframe

假设http://a.com/foo包含<iframe src="http://b.com/bar">

有时b.com/bar会突破其框架:顶级窗口将从aff重定向到b.com/bar。我不知道b.com是如何做到的。

我认为跨域iframe不可能干扰父级,除非父级通过postMessage进行合作。是否正在改变窗口位置?

如果发生了这种情况,a.com如何阻止此重定向?我控制了a.com但无法修改b.com。

如果这不是正在发生的事情,我怎样才能找出b.com正在做什么来实现重定向?

强制b.com将自身加载到新窗口或破坏其对topparent对象的访问权限是可以接受的。 b.com行为的其他降级可能是可以接受的。

4 个答案:

答案 0 :(得分:1)

家长可以使用sandbox上的iframe属性:
http://www.w3schools.com/TAgs/att_iframe_sandbox.asp

然后iframe将无法重定向父级。

答案 1 :(得分:0)

可能发生的事情是b.com内的链接具有属性Target ='_ parent'。   这将使窗口/ iframe父更新。

如果您控制b.com - 确保您的所有目标都是_self。

答案 2 :(得分:0)

这称为“破坏帧”#。据说有一些技术可以阻止它(http://seclab.stanford.edu/websec/framebusting/index.php)。

也许您可以使用ajax或类似方法将框架的内容加载到您的网页中而不是iframe?

答案 3 :(得分:0)

如果我创建a.com/proxy.php并使用cURL来获取b.com,则ajax解决方案可以正常工作。

优点:

  • 可以更改或删除任何脚本
  • 可以调整b.com内容(预览模式)
  • 可以解决跨域iframe限制

缺点:

  • b.com上的cookies / sessions将无法使用
  • b.com可能需要脚本来创建其内容
  • 带宽负担
  • 使href工作的编码工作