Предотвратить родительские манипуляции с DOM для дочернего сценария iframe

У меня есть страница, содержащая другую страницу в том же домене внутри фрейма. Можно ли предотвратить, чтобы скрипт на странице в рамке мог манипулировать DOM верхней страницы (например, добавляя элемент или скрипт)?

2 ответа

Наилучшим решением, вероятно, является использование атрибута песочницы HTML5 в iframe, который (по умолчанию) явно отключает доступ к родительскому DOM как для сценариев, так и для одного источника.

См. http://msdn.microsoft.com/en-us/hh563496.aspx

Вы можете поэкспериментировать с избавлением от "опасных" функций, но сохранить анонимные ссылки на них, что-то вроде..

(function(){
    var hiddenrefs = {};

    hiddenrefs.dGetElementById = document.getElementById;
    document.getElementById = null;
})();

и так далее. Тем не менее, это было бы очень утомительной работой и в любом случае обречено на провал. Если это попытка разрешить пользователям запускать Javascript в контролируемой среде внутри iframe, это ошибочная форма безопасности. Iframe может просто выпустить top.location = "http://www.myevilpage.com" в этом случае игра для вас все равно закончена. (Это верно даже для другого домена. Iframe может по-прежнему перенаправлять пользователя и всякие неприятные вещи, даже если он, строго говоря, не может получить доступ к DOM родителя.) Разрешение пользователям запускать код JS никогда не бывает безопасным без фильтрации Исходный код для вредоносного кода, и даже с фильтрацией, это довольно небезопасно, потому что фильтрацию в основном легко обойти. Многие пытались и многие потерпели неудачу. Я бы никогда не рекомендовал пользователям запускать Javascript.

Другие вопросы по тегам