gpt4 book ai didi

Javascript,跟踪 iframe 重定向顶部窗口

转载 作者:可可西里 更新时间:2023-11-01 01:19:40 24 4
gpt4 key购买 nike

由于除了沙盒之外没有其他方法可以阻止 iframe 重定向顶部框架,沙盒会阻止可见性跟踪所需的其他功能,因此我想跟踪重定向。由于一个站点可以有多个 iframe,因此可以是其中任何一个。

有什么方法可以跟踪/找出哪个(特定的 iframe)导致顶部框架重定向?

这是一个沙箱(使用浏览器控制台并启用保留日志):

Edit 3v50wqxz66

注意 iframe 内容通常是跨域的。为了便于在 sandox 中使用它。

最佳答案

我们可以使用类似 iframe.contentWindow.document 的东西访问 iframe 内容但如果我们观察 Same-origin policy ,这是可能的.

另一种方法是设置 Content-Security-Policy 标题如:

<meta http-equiv="Content-Security-Policy" content="frame-src http://example.com">

父页面中的此 header 可防止加载与 http://example.com 不同的网站在框架中,还有一种方法可以report发送帖子的拒绝行为但不幸的是不能用 <meta> 设置标记(它只是服务器端)。使用这种方法我们必须执行白名单,所以我认为在这种情况下它可能没有用。但是,如果第一次给出白名单,可以设置所有站点可用,所以当iframe重定向时,浏览器将拒绝加载它。

如果不是同源和执行白名单的可能性,那么我认为我们可以做的更好的是调用 iframe onunload 事件,不幸的是,当 iframe 页面不仅在重定向时重新加载时,也会触发此事件。我认为这是最接近的方法。为此,此代码有效。

var srcs = ["iframe2.html","iframe.html","iframe2.html"];


for (let i = 0; i < srcs.length; i++) {
var iframe = document.createElement('iframe');
iframe.src = srcs[i];
iframe.name = "i"+i;
document.body.appendChild(iframe);
window["i"+i].onunload = function(){console.log("change "+i)}
}

当然onunload第一次被触发,当所有 iframe 加载时,因此重定向是第 2 次第 3 次,依此类推。但我们可以排除第一种情况。

这是一个完整的例子 https://codesandbox.io/s/o16yk7mqy ,我创建了 iframe3.html,它既不刷新也不重新加载以清楚地显示这一点。我还创建了一个简单的重定向或重新加载 iframe 列表。

更新据我所知,你想要的是用 sandbox 设置 iframe属性和白名单所有你想要的但没有 allow-top-navigation ,类似于:

<iframe src="iframe.html" sandbox="allow-script allow-forms allow-popups allow-pointer-lock allow-same-origin"></iframe>

正如我在评论中所说,至少在 Chrome 64.0.3282.167 中,当我们委托(delegate)除 allow-top-navigation 之外的所有内容时,当 iframe 尝试重定向顶部框架时,它会抛出异常。该行为在 Firefox(至少 58.0.2)中有所不同。 Firefox 拒绝顶部导航但继续使用代码。

因此,作为结论,我认为最好的方法是 sanbox 和 onunload 的组合,或者只是 onunload。当然,如果可能的话,Content-Security-Policy是最安全和灵活的方式。这取决于实现。我认为不涉及服务器端代码来执行完美的解决方案几乎是不可能的。有白名单可以查,像这个API https://developers.google.com/safe-browsing/v4/还有黑名单可以查,看这个帖子https://security.stackexchange.com/questions/32058/looking-for-url-blacklists-of-malicious-websites .

关于Javascript,跟踪 iframe 重定向顶部窗口,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50352346/

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