这个问题以前是asked and answered正确的,但似乎没有发布解决方案。
如果一个站点有iframe,并且有人想要防止这些iframe被包含在来自不同域的框架中,那么简单的框架分解将不会有用:
<script>if (top != self) top.location = location</script>
然而,由于对其他域的跨框架脚本应该会产生异常,所以在iframe中似乎可以很好地工作:
<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
语句?
这是否足以防止仅来自其他域的帧?
<script>
try {
var bogus = top.document.domain;
}
catch () {
top.location = "/error/naughtypuppy";
}
</script>
编辑:这里暗示了一个类似的解决方案,但不会依赖于父框架来包含框架分解代码。Detect when iframe is cross-domain, then bust out of it。本质上与“尝试访问另一个框架并在发生异常时中断”的解决方案相同。
发布于 2010-11-15 17:08:18
该代码容易受到利用"onbeforeunload“特性的某种形式的攻击。父(邪恶)页面设置了一个间隔处理程序(由于域的差异,它对您的代码是不可破坏的)和一个"onbeforeunload“处理程序。第二个处理程序只是更新一些全局变量(也是不可破坏的),以记录窗口“受到攻击”的事实,然后弹出间隔计时器(运行速度足够快,应该能够在浏览器完成对合法网址的外部窗口更新之前激活),并将window.location
更新为指向某个攻击者控制的网址,该网址返回no-op204响应。浏览器会忘记您的HTTP请求,并从间隔处理程序发起的较新事务中“更新”窗口。
下面是较老的SO问题:Frame Buster Buster ... buster code needed
发布于 2014-10-02 21:21:04
我有一个网站,仍然有框架,我现在不能删除他们。这是我能找到的最好的解决方案:
<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
https://stackoverflow.com/questions/3823875
复制相似问题