Подтвердить что ты не робот

Строгая проверка и фильтрация HTML в PHP

Я ищу наилучшие методы для выполнения строгой ( "белого" ) проверки/фильтрации предоставленного пользователем HTML.

Основная цель - отфильтровать XSS и аналогичные nasties, которые могут быть введены через веб-формы. Вторичная цель - ограничить поломку содержимого HTML, введенного нетехническими пользователями, например. через редактор WYSIWYG, который имеет вид HTML.

Я рассматриваю возможность использования HTML-очистителя или сворачивания моего собственного с помощью HTML-анализатора DOM для прохождения процесса, такого как HTML (грязный) → DOM (немытый) → фильтр- > DOM (чистый) -. > HTML (чистый)

Можете ли вы описать успехи этих или любых более простых стратегий, которые также эффективны? Любые подводные камни, за которыми следует следить?

4b9b3361

Ответ 1

Я тестировал все эксплоиты, которые я знаю на очистителе HTML, и это было очень хорошо. Он фильтрует не только HTML, но также CSS и URL-адреса.

Как только вы сужаете элементы и атрибуты невинных, подводные камни находятся в содержимом атрибутов - псевдо-URL-адреса javascript: (IE позволяет использовать символы табуляции в имени протокола - java	script:) и свойства CSS, которые запускают JS.

Анализ URL-адресов может быть сложным, например. они действительны: http://spoof.com:[email protected] или //evil.com. Интернационализированные домены (IDN) могут быть записаны двумя способами: Unicode и punycode.

Пойдите с очистителем HTML - он имеет большинство из них. Если вы просто хотите исправить неисправный HTML, используйте HTML Tidy (он доступен как расширение PHP).

Ответ 2

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

Также обратите внимание на действительный вид:

<img src="http://www.mysite.com/logout" />

и

<a href="javascript:alert('xss hole');">click</a>

Ответ 3

Я использовал HTML Purifier с успехом и не имел никакого xss или другого нежелательного входного фильтра. Я также запускаю sanitize HTML через расширение Tidy, чтобы убедиться, что он также проверяет.

Ответ 4

W3C имеет большой открытый исходный пакет для проверки HTML, доступного здесь:

http://validator.w3.org/

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