Использование nh3 и mark_safe в разметке django
Я использую библиотеку nh3 в своем проекте Django для дезинфекции HTML моего рендеринга уценки. У меня также есть огражденные блоки кода и реализована подсветка блоков кода. Если я не использую mark_safe в очищенной разметке nh3, вся моя разметка с насыщенным текстом превращается в html-код. Если я использую mark_safe в модели Post после очистки разметки, она больше не отображается как html-код. Вот что у меня есть в функции get_message_as_markdown модели Post, отвечающей за генерацию разметки:
from markdown import markdown
import nh3
def get_message_as_markdown(self):
clean_content = nh3.clean(self.message)
rendered_content = markdown(clean_content, extensions=['fenced_code', 'codehilite'])
return mark_safe(rendered_content)
Безопасно ли это делать? Заранее спасибо!
Использование mark_safe с обеззараженным HTML может быть безопасным, если вы уверены, что обеззараживание эффективно удаляет вредные HTML и JavaScript. Поскольку nh3 специально разработан для санитарной обработки HTML, ваш подход имеет под собой хорошую основу. Вот некоторые специфические соображения для обеспечения безопасности вашей установки:
Область санирования:
nh3эффективно удаляет небезопасные теги и атрибуты, но важно убедиться, что ваши настройки настроены так, чтобы предотвратить любые риски инъекций. Если вы еще этого не сделали, проверьте конфигурациюnh3, чтобы убедиться, что он удаляет или экранирует любые теги, атрибуты или протоколы (например,javascript:в URL), которые могут создавать XSS-уязвимости.Дважды проверьте огражденные блоки кода и подсветку: Поскольку вы разрешаете
fenced_codeиcodehilite, которые добавляют классы и стили к элементам<code>и<pre>, убедитесь, чтоnh3не удаляет необходимые атрибуты, требуемые для подсветки кода. Вам может потребоваться разрешить определенные атрибутыclass, если вы используете CSS для подсветки синтаксиса.Регулярно просматривайте
nh3обновления : Библиотеки, подобныеnh3, периодически обновляются для улучшения безопасности. Следите за ее обновлением, чтобы убедиться, что она содержит последние исправления безопасности, особенно если есть обновления, устраняющие новые проблемы дезинфекции или уязвимости.Тестирование: Перед развертыванием неплохо бы тщательно протестировать эту установку, особенно попробовав вставить различные типы потенциально опасного содержимого (например, теги
<script>, iframe, встроенные обработчики событий, такие какonclick). Это поможет вам убедиться, чтоnh3адекватно обеззараживает содержимое.