gpt4 book ai didi

javascript - 为其他域的 iframe 创建内容

转载 作者:塔克拉玛干 更新时间:2023-11-02 21:46:35 24 4
gpt4 key购买 nike

对于我们的论文,我们需要开发 AdJail 方法的原型(prototype),该方法可提供针对恶意广告的安全性。该方法通过将广告脚本放置在具有不同来源的 iframe 中的“shadowpage”中来隔离广告脚本。 (受同源策略保护)通过将原始页面的内容复制到影子页面,后缀只能访问发布者允许访问的内容。

问题在于为影子页面创建 iframe。最初,我们实现了这个:

if (document.createElement && (iframe = document.createElement('iframe'))) {
iframe.id = "shadowpage";
iframe.name = "shadowpage";
iframe.height = 1400;
iframe.width = 1400;
document.body.appendChild(iframe);
var shadowScript = document.createElement("script");
shadowScript.src = "ShadowTunnelScript.js";
iframe.contentDocument.body.appendChild(shadowScript);
adUrl = adScript;
}

显然,这不提供同源策略的请求安全性,因为此 iframe 与包含页面具有相同的来源。

我们的替代方案如下,将 iframe 的 src 设置为具有不同来源的页面:

if (document.createElement && (iframe = document.createElement('iframe'))) {
iframe.id = "shadowpage";
iframe.name = "shadowpage";
iframe.height = 1400;
iframe.width = 1400;
iframe.src = "http://***/AdJail/Shadowpage.html";
//iframe.style.display = "none";
document.body.appendChild(iframe);
}

但在这种情况下,我们原型(prototype)的用户需要在不同的服务器上自己创建一个影子页面。

我们的问题是:是否可以创建这样一个不同来源的iframe,动态生成这个iframe的内容,这样用户只需要调用一个库而不用自己提供shadowpage。

这是否可能通过首先生成 iframe 的内容然后以某种方式更改 iframe 的来源来实现?

最佳答案

您可以尝试将值设置为 document.domain 或将 iframe 内容设置为 datauri :

var content=window.btoa('<html>(..)<script>document.domain='sandbox';</script></html>');
iframe.src = "data:text/html;base64,"+content;

关于javascript - 为其他域的 iframe 创建内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10727726/

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