использование htmlpurifier для экранирования / фильтрации ввода или вывода - PullRequest
6 голосов
/ 24 мая 2010

Я обрабатываю пользовательский ввод с помощью редактора javascript WYSIWYG и планирую использовать htmlpurifier для очистки текста.

Я подумал, что будет достаточно использовать htmlpurifier на входе, сохранить очищенный ввод в базе данных, а затем вывести его без дальнейшего экранирования / фильтрации. Но я слышал другие мнения, что вы всегда должны избегать результатов.

Может кто-нибудь объяснить, почему мне нужно чистить вывод, если я уже очищаю ввод?

Ответы [ 3 ]

4 голосов
/ 24 мая 2010

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

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

Я бы добавил, что вы должны быть очень осторожны с тем, что вы разрешаете на этапе проверки.Возможно, вы захотите разрешить только несколько тегов и атрибутов HTML.

2 голосов
/ 24 мая 2010

Чтобы быть на 100% безопасным, используйте HTMLPurifier дважды. Перед сохранением HTML в БД и перед выводом его на экран.
Огромным недостатком такого решения является производительность. HTMLPurifier очень медленный при фильтрации HTML, и вы можете столкнуться с более длительным временем обработки ваших страниц.

С вами должно быть все в порядке, если вы выполняете только 1-2 фильтрации перед выводом чего-либо на экран, но если вы делаете 10 фильтраций на запрос, как мы, мы решили не использовать HTMLPurifier при выводе большого количества текстов для сохранения.

HTMLPurifier занимал 60% времени обработки на запрос, и вместо этого мы хотели добиться меньшего времени отклика и более высокого UX.

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

1 голос
/ 24 мая 2010

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

...