Подтвердить что ты не робот

Отключить JavaScript в iframe/div

Я делаю небольшой редактор HTML-страниц. Редактор загружает файл в iframe. Оттуда он может добавлять, изменять или удалять элементы на странице с новыми атрибутами, стилями и т.д. Проблема заключается в том, что JavaScript (и/или другие языки программирования) могут полностью изменять страницу при ее загрузке до вы начинаете редактировать элементы. Поэтому, когда вы сохраняете, он не сохранит исходную разметку, а измененную страницу + ваши изменения.

Итак, мне нужно каким-то образом отключить JavaScript в iframe или каким-то образом удалить все JavaScript до того, как JavaScript начнет изменять страницу. (Я полагаю, что мне придется разобрать файл для PHP, но это не должно быть слишком сложно). Я рассмотрел возможность записи script для циклического перемещения всех элементов, удаления любых тегов, onclick, onfocus, onmouseover и т.д. Но это было бы настоящей болью.

Кто-нибудь знает о более легком способе избавиться от работы JavaScript внутри iframe?

UPDATE: если я что-то пропустил, я считаю, что нет возможности просто отключить JavaScript. Пожалуйста, поправьте меня, если я ошибаюсь. Но, я думаю, единственный способ сделать это - разобрать любые теги script и события JavaScript (щелчок, mouseover и т.д.) Из запрошенной строки.

4b9b3361

Ответ 1

Вы можете попробовать такое же решение, принятое CKEditor, у которого есть демо здесь.
Переключаясь из режима RTE для просмотра исходного режима, вы можете ввести некоторый JavaScript и увидеть результат, который является заменой JS node в безопасной кодированной строке.
Если вы находитесь в режиме просмотра источника, введя некоторую строку JS, например:

<script type="text/javascript">
// comment
alert('Ciao');
</script>

вы увидите, что это будет показано при возврате в режим богатого текстового редактора:

<!--{cke_protected}%3Cscript%20type%3D%22text%2Fjavascript%22%3E%0D%0A%2F%2F%20comment%0D%0Aalert('Ciao')%3B%0D%0A%3C%2Fscript%3E-->

Я думаю, что это один из самых простых и эффективных способов, поскольку RegExp для разбора узлов JS не является сложным.
Пример:

var pattern = /<script(\s+(\w+\s*=\s*("|').*?\3)\s*)*\s*(\/>|>.*?<\/script\s*>)/;
var match = HTMLString.match(pattern); // array containing the occurrences found

(Конечно, чтобы заменить script node, вы должны использовать метод replace()).

С уважением.

Ответ 3

Да, ваше обновление верно. Вы должны полагать, что любой ввод, который вы получаете от пользователя, может содержать вредоносные элементы. Таким образом, вы должны проверяться на сервере перед принятием их ввода: -)

Ответ 4

Вы можете установить Политика безопасности контента как script -src 'self' в заголовке. CSP блокирует любые скрипты, кроме нашего собственного веб-сайта. Таким образом мы можем предотвратить любые скрипты iframe, изменяющие элементы на нашей странице.

Вы можете получить дополнительную информацию отсюда http://www.html5rocks.com/en/tutorials/security/content-security-policy/