首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >只有跨域的框架中断,而不是来自同一来源的iframe?

只有跨域的框架中断,而不是来自同一来源的iframe?
EN

Stack Overflow用户
提问于 2010-09-30 00:45:06
回答 2查看 4.9K关注 0票数 3

这个问题以前是asked and answered正确的,但似乎没有发布解决方案。

如果一个站点有iframe,并且有人想要防止这些iframe被包含在来自不同域的框架中,那么简单的框架分解将不会有用:

代码语言:javascript
运行
复制
<script>if (top != self) top.location = location</script>

然而,由于对其他域的跨框架脚本应该会产生异常,所以在iframe中似乎可以很好地工作:

代码语言:javascript
运行
复制
<script>
try {
  if (window.document.domain != top.document.domain) {   // throws exception
    throw "You naughty puppy!"; // Should not ever get here, right?
  }
}
catch () {
  top.location = "/error/naughtypuppy";
}
</script>

上面的if本身应该足以防止iframe的跨域成帧。它应该只返回false或抛出异常,那么在浏览器中脚本是否可以到达throw语句?

这是否足以防止仅来自其他域的帧?

代码语言:javascript
运行
复制
<script>
try {
  var bogus = top.document.domain;
}
catch () {
  top.location = "/error/naughtypuppy";
}
</script>

编辑:这里暗示了一个类似的解决方案,但不会依赖于父框架来包含框架分解代码。Detect when iframe is cross-domain, then bust out of it。本质上与“尝试访问另一个框架并在发生异常时中断”的解决方案相同。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2010-11-16 01:08:18

该代码容易受到利用"onbeforeunload“特性的某种形式的攻击。父(邪恶)页面设置了一个间隔处理程序(由于域的差异,它对您的代码是不可破坏的)和一个"onbeforeunload“处理程序。第二个处理程序只是更新一些全局变量(也是不可破坏的),以记录窗口“受到攻击”的事实,然后弹出间隔计时器(运行速度足够快,应该能够在浏览器完成对合法网址的外部窗口更新之前激活),并将window.location更新为指向某个攻击者控制的网址,该网址返回no-op204响应。浏览器会忘记您的HTTP请求,并从间隔处理程序发起的较新事务中“更新”窗口。

下面是较老的SO问题:Frame Buster Buster ... buster code needed

票数 2
EN

Stack Overflow用户

发布于 2014-10-03 05:21:04

我有一个网站,仍然有框架,我现在不能删除他们。这是我能找到的最好的解决方案:

代码语言:javascript
运行
复制
<style>html { display:none }</style>
<script>
if (self == top) {
  document.documentElement.style.display = 'block';
} else {
  top.location = self.location;
}
</script> 

从这个链接:XFS 101-cross-frame-scripting-explained

基于以下网站的演示文稿:OWASP_AppSec_Research_2010_Busting_Frame_Busting_by_Rydstedt

这是一个更新的OWasp Clickjacking page

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3823875

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档