Я часто задавался вопросом - почему использование белый список в противоположность черному списку при очистке ввода HTML?
Сколько подлые приемы HTML там для открытия уязвимостей XSS? Очевидно теги script и кадры не позволяются, и белый список использовался бы на полях в элементах HTML, но почему запрещают большую часть из всего?
Если вы оставляете что-то в белом списке, то вы просто ломаете то, что было недостаточно важным для вас, чтобы думать об этом в первую очередь.
Если вы оставите что-то в черном списке, то откроете большую дыру в безопасности.
Если браузеры добавляют новые функции, то ваш черный список устаревает.
Несмотря на то, что теги script и frame запрещены, вы все равно можете поставить любой тег вроде этого
<test onmouseover=alert(/XSS/)>mouse over this</test>
и во многих браузерах он работает.
Потому что тогда вы уверены, что ничего не пропустите. Явно разрешая некоторые теги, вы, очевидно, имеете больше контроля над тем, что разрешено.
Белые списки используются в большинстве тем, связанных с безопасностью. Подумайте о брандмауэрах. Первое правило - блокировать любой (входящий) трафик, а затем открывать только те порты, которые должны быть открыты. Это делает его гораздо более безопасным.
Потому что другие теги могут нарушить верстку страницы. Представьте, что произойдет, если кто-то внедрит тег .
тег также опасен.
Просто вчера прочитал кое-что об этом. Это находится в руководстве feedparser .
Фрагмент:
Чем больше я исследую, тем больше случаев я нахожу, когда Internet Explorer для Windows обрабатывает, казалось бы, безобидную разметку как код и беспечно выполняет { {1}} это. Вот почему Universal Feed Parser использует белый список, а не черный список. Я достаточно уверен, что ни один из элементов или атрибутов в белом списке не является безопасным риски. Я совершенно не уверен в элементах или атрибутах, которые я не исследовал явно . И я совершенно не уверен в своей способности обнаруживать строки в значениях атрибутов, которые Internet Explorer для Windows будет рассматривать как исполняемый код. Я не буду пытаться сохранять «только хорошие стили». Удаляются все стили .
Существует серьезный риск, если вы занесете в черный список только некоторые элементы и забудете о важном. Когда вы добавляете в белый список теги, которые, как вы знаете, безопасны, уменьшается риск допустить злоупотребление.