我正在进行一些简单的网页集成工作,我通过使用iframe来完成这项工作。我的主窗口有一些javascript代码,它与我的服务器交互,将iframe重定向到所需的URL。不幸的是,其中一个目标页面内含以下代码:
if (top.location != location) {
top.location.href = document.location.href ;
}
我正在进行一些简单的网页集成工作,我通过使用iframe来完成这项工作。我的主窗口有一些javascript代码,它与我的服务器交互,将iframe重定向到所需的URL。不幸的是,其中一个目标页面内含以下代码:
if (top.location != location) {
top.location.href = document.location.href ;
}
这是我的第一篇帖子,如果不起作用请不要抨击我,但此修复方法在IE中似乎对我有效。
在您的框架中添加security="restricted"。
示例:
<iframe id="frame_id" name="frame_name" security="restricted" src="page.html">
</iframe>
编辑:我发现了更好的解决方案。它不会阻止脚本且不需要JavaScript。尝试使用sandbox="..."
您想要防止顶部导航,因此请将其去除,然后它将不被允许。任何省略的内容将被阻止
例如:
<iframe sandbox="allow-same-origin allow-scripts allow-popups allow-forms" src="http://www.example.com"></iframe>
有一种技术可以禁用防止框架被破坏的代码,如在较新的SO问题中所讨论的:
实际上,你的框架破解代码也可以被破解,如此示例所示:
<script type="text/javascript">
var prevent_bust = 0
window.onbeforeunload = function() { prevent_bust++ }
setInterval(function() {
if (prevent_bust > 0) {
prevent_bust -= 2
window.top.location = 'http://server-which-responds-with-204.com'
}
}, 1)
</script>
以下代码实现了如下功能:
window.onbeforeonload
事件处理程序,每当浏览器试图离开当前页面时,计数器将加一setInterval()
设置定时器,每毫秒触发一次,如果它检测到计数器已经增加,则将当前位置更改为攻击者控制的服务器在经过了大量搜索之后,我想到了一个简单的方法。我在自己的网站上创建了一个虚拟页面,然后通过 i frame 调用它。接着,在虚拟页面中添加了一个 i frame,用于调用需要打破框架限制的网站。这样就可以顺利地跳出第一个框架,而由于虚拟页面是在我的网站上,所以它仍旧保持在顶层页面的框架内。即可实现这个技巧。