gpt4 book ai didi

javascript - Frame breaking 仅跨域而不是来自同一来源的 iframe?

转载 作者:行者123 更新时间:2023-11-29 10:54:11 24 4
gpt4 key购买 nike

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

如果一个站点有 iframe,并且想要防止它们被包含在来自不同域的框架中,那么简单的 frame-busting 将没有用:

<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 .本质上与“尝试访问其他框架并在发生异常时崩溃”的解决方案相同。

最佳答案

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

这是较旧的 SO 问题:Frame Buster Buster ... buster code needed

关于javascript - Frame breaking 仅跨域而不是来自同一来源的 iframe?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3823875/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com