防止儿童iframe"突破框架"

srm*_*ark 13 javascript iframe

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

if (top.location != location) {
    top.location.href = document.location.href ;
}
Run Code Online (Sandbox Code Playgroud)

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

我怎么能解决这个问题?

谢谢

小智 23

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

例:

<iframe id="frame_id" name="frame_name" security="restricted" src="page.html">  
</iframe>
Run Code Online (Sandbox Code Playgroud)

编辑:我找到了更好的解决方案.这不会阻止脚本,也不需要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>
Run Code Online (Sandbox Code Playgroud)


Col*_*ard 12

有一种技术可以禁用帧破坏代码,如更新的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>
Run Code Online (Sandbox Code Playgroud)

此代码执行以下操作:

  • 每次浏览器尝试通过window.onbeforeonload事件处理程序离开当前页面时,都会递增计数器
  • 设置一个通过每毫秒触发的计时器,setInterval()如果它看到计数器递增,则将当前位置更改为攻击者控制的服务器
  • 该服务器提供具有HTTP状态代码204的页面,这不会导致浏览器在任何地方导航


小智 6

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

那么尊重流量,那架破坏javascript的窃取?

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

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

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

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


小智 5

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