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

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

21 голосов
/ 11 сентября 2010

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

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

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

ОБНОВЛЕНИЕ: если я что-то пропустил, я думаю, что естьнет способа просто «отключить JavaScript».Пожалуйста, поправьте меня, если я ошибаюсь.Но я думаю, что единственный способ сделать это - проанализировать любые теги сценариев и события JavaScript (щелчок, наведение мыши и т. Д.) Из запрошенной строки страницы.

Ответы [ 4 ]

26 голосов
/ 01 июня 2013

HTML5 вводит атрибут sandbox в iframe, который, если он пуст, отключает загрузку и выполнение JavaScript.

4 голосов
/ 16 сентября 2010

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

2 голосов
/ 17 января 2016

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

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

2 голосов
/ 27 ноября 2010

Вы можете попробовать то же решение, принятое CKEditor, демонстрацию которого вы можете здесь .
Переключившись из режима RTE в режим просмотра исходного кода, вы можете ввести немного JavaScript и увидеть результат, который заменяет узел JS в безопасно закодированной строке.
Если вы находитесь в режиме просмотра источника , введите строку 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

(Конечно, для замены узла скрипта вы должны использовать метод replace ()).

Привет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...