Какие плохие вещи может сделать пользователь в браузере без тега script? - PullRequest
1 голос
/ 02 сентября 2011

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

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

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

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

1 Ответ

3 голосов
/ 02 сентября 2011

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

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

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

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

...