использование htmlpurifier для выхода/фильтрации ввода или вывода

Я обрабатываю ввод данных пользователем от общественности с WYSIWYG-редактором JavaScript, и я - планирование использования htmlpurifier для чистки текста.

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

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

7
задан Yehosef 24 May 2010 в 14:06
поделиться

3 ответа

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

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

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

4
ответ дан 7 December 2019 в 05:18
поделиться

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

1
ответ дан 7 December 2019 в 05:18
поделиться

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

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

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

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

3
ответ дан 7 December 2019 в 05:18
поделиться
Другие вопросы по тегам:

Похожие вопросы: