繁体   English   中英

为其他域的iframe创建内容

[英]Create content for iframe of other domain

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

问题在于为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);
}

但在这种情况下,我们原型的用户需要在不同的服务器上自己创建一个shadowpage。

我们的问题是:是否可以创建具有不同来源的iframe,动态生成此iframe的内容,以便用户只需要在不提供阴影页面的情况下调用库。

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM