Предотвратить родительские манипуляции с DOM для дочернего сценария iframe
У меня есть страница, содержащая другую страницу в том же домене внутри фрейма. Можно ли предотвратить, чтобы скрипт на странице в рамке мог манипулировать DOM верхней страницы (например, добавляя элемент или скрипт)?
2 ответа
Наилучшим решением, вероятно, является использование атрибута песочницы HTML5 в iframe, который (по умолчанию) явно отключает доступ к родительскому DOM как для сценариев, так и для одного источника.
Вы можете поэкспериментировать с избавлением от "опасных" функций, но сохранить анонимные ссылки на них, что-то вроде..
(function(){
var hiddenrefs = {};
hiddenrefs.dGetElementById = document.getElementById;
document.getElementById = null;
})();
и так далее. Тем не менее, это было бы очень утомительной работой и в любом случае обречено на провал. Если это попытка разрешить пользователям запускать Javascript в контролируемой среде внутри iframe, это ошибочная форма безопасности. Iframe может просто выпустить top.location = "http://www.myevilpage.com"
в этом случае игра для вас все равно закончена. (Это верно даже для другого домена. Iframe может по-прежнему перенаправлять пользователя и всякие неприятные вещи, даже если он, строго говоря, не может получить доступ к DOM родителя.) Разрешение пользователям запускать код JS никогда не бывает безопасным без фильтрации Исходный код для вредоносного кода, и даже с фильтрацией, это довольно небезопасно, потому что фильтрацию в основном легко обойти. Многие пытались и многие потерпели неудачу. Я бы никогда не рекомендовал пользователям запускать Javascript.