Является ли 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