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


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

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

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

Author: Yehosef, 2010-05-24

3 answers

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

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

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

 4
Author: Artefacto, 2010-05-24 14:00:00

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

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

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

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

 2
Author: michal kralik, 2010-05-24 14:11:15

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

 1
Author: Edward Z. Yang, 2010-05-24 13:58:45