Что плохого может сделать пользователь в браузере без тега скрипта?

У меня есть форма ввода, в которой пользователь может вводить произвольный HTML-код. Что мне нужно отфильтровать, кроме тегов скрипта? Вот что я делаю:

userInput.replace(/<(script)/gi, "&lt;$1");

но дезинфицирующее средство ОМУ (используется здесь на SO) управляет белым списком тегов и отфильтровывает (пропускает) все остальные теги. Почему?

Мне не нравятся белые списки, потому что я не хочу запрещать пользователю вводить произвольные теги, если она того пожелает; но при необходимости я могу использовать более обширный черный список, помимо «скрипта». Что мне нужно в качестве черного списка?


person Bambax    schedule 02.09.2011    source источник
comment
черный список действительно сложнее, просто подумайте о теге скрипта, проверьте эту ссылку: ha.ckers.org/xss .html   -  person regilero    schedule 02.09.2011
comment
см. также недавние темы stackoverflow.com/questions/7268023/ stackoverflow.com/questions/199017/ stackoverflow.com/questions/7255158/   -  person Cheekysoft    schedule 02.09.2011


Ответы (1)


Краткий ответ: все, что они могут сделать с тегом script.

Тег script не требуется для запуска javascript. Скрипт также может быть помещен в почти каждый тег HTML. Скрипт может появляться в ряде мест в дополнение к тегу скрипта, включая, помимо прочего, атрибуты src и href, которые используются для URL-адресов, обработчики событий и атрибут style.

Возможность для пользователя разместить нежелательный сценарий на вашей странице - это уязвимость системы безопасности, известная как межсайтовый скриптинг. Прочтите эту тему и прочтите шпаргалку по предотвращению XSS.

Возможно, вы не захотите позволять пользователям добавлять HTML на ваши страницы. Если вам нужна эта функция, рассмотрите другие форматы, такие как Markdown, который позволяет отключить использование любого встроенного HTML; или другой менее безопасный вариант - использовать библиотеку фильтрации, которая пытается удалить весь сценарий, например HTMLPurifier. Если вы выбираете опцию фильтрации, не забудьте подписаться на объявления о новых выпусках и всегда возвращаться к своему проекту, чтобы установить выпуски фильтра с исправленными ошибками, поскольку новые эксплойты будут обнаружены и устранены.

person Cheekysoft    schedule 02.09.2011
comment
Markdown позволяет использовать HTML, вот в чем суть (а WMD, о котором я упоминаю в своем вопросе, является редактором уценки SO); поэтому с помощью Markdown == с использованием HTML (при предварительном просмотре ввода mk). - person Bambax; 02.09.2011
comment
Главное, что нужно убрать, это то, что внедрение черного списка не является хорошей идеей с точки зрения безопасности, поскольку отсутствие одного вектора атаки в списке означает, что вас все еще могут использовать. HTMLPurifier - это хорошо поддерживаемый проект черного списка, который стремится решить эту проблему так, как вы предлагаете. Посмотрите на размер кода в этом проекте и знайте, что это сложно. Обратите внимание, что HTMLPurifier был обнаружен уязвимым для XSS в 2010 и 2011 годах, и постоянные исследования и поддержка ведутся в этом направлении. Шпаргалка по XSS из комментария regilero показывает, насколько разнообразными могут быть векторы атак. - person Cheekysoft; 02.09.2011
comment
Я никогда серьезно не изучал XSS (что, вероятно, очевидно из моего вопроса ;-), но просто читать шпаргалку по предотвращению XSS, на которую вы ссылаетесь, увлекательно. Я вижу, насколько сложно / невозможно занести в черный список (поскольку воображение злоумышленников бесконечно), и вместо этого введу белый список. - person Bambax; 02.09.2011