防止儿童iframe“突破框架”

时间:2009-04-15 16:11:33

标签: javascript iframe

我正在做一些简单的网络集成工作,我正在通过使用iframe来完成。我的主窗口有一些javascript,它与我的服务器交互,将iframe重定向到所需的URL。其中一个目标页面遗憾地包含以下代码:

if (top.location != location) {
    top.location.href = document.location.href ;
}

脚本因跨站点限制而死亡,并阻止该页面正常呈现。我无法修改该页面的来源(我正在整合的第三方)。

我该如何解决这个问题?

由于

4 个答案:

答案 0 :(得分:23)

这是我的第一篇文章,所以如果它不起作用请不要丢弃我,但这个修复似乎对IE有用。 将security =“restricted”添加到您的框架中。

示例:

<iframe id="frame_id" name="frame_name" security="restricted" src="page.html">  
</iframe>

编辑:我找到了更好的解决方案。这不会阻止脚本,也不需要javascript。尝试使用sandbox =“...”

  • 允许表单允许表单提交
  • allow-popups允许弹出窗口
  • allow-pointer-lock允许指针锁定
  • allow-same-origin允许文档保持其原点
  • allow-scripts允许JavaScript执行,并允许功能自动触发
  • allow-top-navigation允许文档通过导航顶级窗口突破框架

热门导航是您要阻止的内容,因此请将其保留,不允许使用。遗漏的任何内容都将被阻止

离。

<iframe sandbox="allow-same-origin allow-scripts allow-popups allow-forms" src="http://www.example.com"></iframe>

答案 1 :(得分:12)

有一种技术可以禁用帧破坏代码as discussed in a newer SO question

  

事实证明,你的破坏框架的代码可以被破坏as shown here

<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()每毫秒触发的计时器,如果它看到计数器递增,则将当前位置更改为攻击者控制的服务器
  •   
  • 该服务器提供HTTP状态代码 204 的页面,这不会导致浏览器在任何地方导航
  •   

答案 2 :(得分:6)

一个有效的问题,我希望更多的人会认真对待,而不仅仅是回应一些关于“尊重”那些材料被联系在一起的愿望的蹩脚评论,有时是无意的。

如果尊重流量,那个破坏javascript的框架会被窃取?

在网络礼节方面,由于这个原因,框架脚本实际上是一个很大的禁忌。

使用框架或iframe有许多真实的,无辜的理由,并且不仅非常容易,而且非常常见,因为代码,特别是url,可以合法地或非法地插入到该框架内的页面中,故意或以其他方式引导流量到另一个页面,相当粗鲁然后打破框架集,并窃取流量。

网站管理员使用的正确网络礼仪方法,不希望他的材料显示在框架集中,无论是有意还是无意地完成,都是将重定向脚本设置为首页,显示一条消息告知冲浪者所请求的页面不打算在框架中查看,如果他们希望查看该页面,那么他们可以在网址上查看,然后链接,在新标签页或浏览器页面中打开,它不会打破框架集,并窃取原始网站的流量,从而允许冲浪者自己做出选择,他们实际上希望冲浪。

我希望更多的网站管理员能够尊重这种网络礼节。

答案 3 :(得分:5)

经过多次搜索,我开发了一个简单的技巧。我在自己的网站上创建了一个虚拟页面,i框架需要这个页面。然后我在虚拟页面中有一个i帧,它要求站点突破帧。它突破了第一帧,但由于虚拟页面在我的网站上,它整齐地保留在首页的框架中。 violla

相关问题