2012-05-23 3 views
4

Для нашего тезиса нам необходимо разработать прототип подхода AdJail, который обеспечивает защиту от вредоносных объявлений. Подход изолирует сценарии рекламы, помещая их в «теневую страницу» в iframe с разным происхождением. (защищено одной политикой происхождения). Копируя содержимое исходной страницы на теневую страницу, рекламный текст имеет доступ только к контенту, к которому разрешен доступ издателя.Создать контент для iframe другого домена

Проблема заключается в создании 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 на страницу с другого происхождения:

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?

+0

HTML5 имеет «песочнице» атрибут фрейма. Но я думаю, что поддержка браузера потребует времени, чтобы наверстать упущенное. – StasM

ответ

0

Вы могли бы попытаться установить значение document.domain или установить содержимое IFrame как datauri:

var content=window.btoa('<html>(..)<script>document.domain='sandbox';</script></html>'); 
iframe.src = "data:text/html;base64,"+content; 
Смежные вопросы