Является ли HTML Purifier слишком медленным для системы комментирования? Есть ли лучшая альтернатива?

Я пишу систему комментирования, например, здесь, на stackru, и я не уверен в том, как лучше всего дезинфицировать пользовательский контент перед выводом.

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

До сих пор я всегда просто запускал свой пользовательский контент через

htmlentities($content, ENT_QUOTES, 'UTF-8')

Что из того, что я понимаю, делает вывод безопасным.

Однако редактор WYSIWYG, который я использую для своей системы комментирования, позволяет форматировать следующие теги HTML:

<code><span><div><label><a><br><p><b><i><del><strike><u><img><video><audio><iframe><object><embed><param><blockquote><mark><cite><small><ul><ol><li><hr><dl><dt><dd><sup><sub><big><pre><code><figure><figcaption><strong><em><table><tr><td><th><tbody><thead><tfoot><h1><h2><h3><h4><h5><h6>

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

В документации к редактору WYSIWYG, который я использую (Redactor), рекомендуется запускать пользовательский контент через strip_tags(), передав вышеупомянутые теги в качестве аргумента разрешенных тегов. Тем не менее, вопросы и ответы, которые я читал на stackru, предположили, что этого может быть недостаточно.

Действуя в предположении strip_tags() не достаточно хорош, я искал альтернативы, и, похоже, одним из наиболее уважаемых вариантов является HTML Purifier. Тем не менее, я продолжаю читать вопросы и ответы здесь, предлагая HTML Purifier очень медленный.

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

Резюме:

  • Будет ли очиститель HTML слишком медленным для этого типа системы комментирования?
  • Есть ли лучшая альтернатива?
  • Как с этим справляется stackru?

1 ответ

Решение

Хитрость заключается в том, чтобы хранить две копии пользовательского ввода: чистую версию и очищенную (т.е. кеш). На самом деле, документация по HTML Purifier комментирует это и дает вам несколько рецептов, как это сделать: http://htmlpurifier.org/docs/enduser-slow.html

Другие вопросы по тегам