Зачем использовать белый список для очистки HTML? - PullRequest
8 голосов
/ 19 марта 2010

Я часто задавался вопросом - зачем использовать белый список, а не черный список при очистке ввода HTML?

Сколько хитрых трюков HTML существует, чтобы открыть уязвимости XSS? Очевидно, что теги и фреймы сценариев недопустимы, и белый список будет использоваться для полей в элементах HTML, но зачем запрещать большую часть всего?

Ответы [ 7 ]

22 голосов
/ 19 марта 2010

Если вы оставляете что-то вне белого списка, то вы просто нарушаете то, что не было достаточно важным для вас, чтобы думать в первую очередь.

Если вы что-то упустили из черного списка, значит, вы открыли большую дыру в безопасности.

Если браузеры добавляют новые функции, ваш черный список устареет.

5 голосов
/ 19 марта 2010

Просто прочитайте что-нибудь об этом вчера. Это в руководстве feedparser .

Фрагмент:

Чем больше я расследую, тем больше дел Я нахожу, где Internet Explorer для Windows будет относиться к, казалось бы, безобидным разметить как код и безболезненно выполнить Это. Вот почему Universal Feed Parser использует белый список, а не черный список. Я достаточно уверен, что ни один из элементы или атрибуты на Белый список - это угрозы безопасности. не я вообще уверен в элементах или атрибуты, которые я не имею явно исследовалась. И у меня нет уверенности вообще в моей способности обнаруживать строки в пределах значений атрибутов, что Интернет Проводник для Windows будет трактоваться как исполняемый код Я не буду пытаться сохранить «только хорошие стили». Все стили удалены.

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

4 голосов
/ 19 марта 2010

Несмотря на то, что теги скрипта и теги фреймов недопустимы, вы все равно можете поместить любой тег, подобный этому

<test onmouseover=alert(/XSS/)>mouse over this</test>

и много браузеров работает.

3 голосов
/ 19 марта 2010

Потому что тогда вы уверены, что ничего не пропустите . Явно разрешая некоторые теги, вы, очевидно, имеете больший контроль над тем, что разрешено.

Белые списки используются в большинстве тем, связанных с безопасностью. Подумайте о брандмауэрах. Первое правило - блокировать любой (входящий) трафик, а затем открывать только те порты, которые должны быть открыты. Это делает его намного более безопасным.

2 голосов
/ 19 марта 2010

Потому что другие теги могут нарушить макет страницы. Представьте, что произойдет, если кто-то введет тег <style>. Тег <object> тоже опасен.

0 голосов
/ 12 января 2016

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

См. Рубен ван Вриланд , лекция Как мы взломали LinkedIn и что произошло дальше для хорошего знакомства с уязвимостями XSS и почему вы хотите, чтобы ваш белый список был настолько строгим, насколько это возможно!

0 голосов
/ 02 декабря 2015

Я предпочитаю иметь оба, я называю это «Черный список с расслабленным белым списком» подход:

  1. Создайте расслабленный «Белый список» тегов и атрибутов.
  2. Создайте «черный список для белого списка», любой тег / атрибут в черном списке ДОЛЖЕН существовать в созданном вами белом списке, иначе появится ошибка.

Этот черный список действует как выключатель для тегов / атрибутов в расслабленном белом списке.

Этот подход «Черный список с расслабленным белым списком» значительно упрощает настройку очищающего фильтра.

Например, Белый список может содержать все теги и атрибуты html5. Хотя черный список может содержать теги и атрибуты, которые следует исключить.

...