2012-05-23 50 views
4

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

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

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

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

+0

HTML5对iframe的“沙箱”属性。但我想浏览器支持需要时间才能赶上。 – StasM

回答

0

你可以尝试设置一个值,document.domain的或设置IFRAME内容作为datauri:

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