Использование 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, ваш подход имеет под собой хорошую основу. Вот некоторые специфические соображения для обеспечения безопасности вашей установки:

  1. Область санирования: nh3 эффективно удаляет небезопасные теги и атрибуты, но важно убедиться, что ваши настройки настроены так, чтобы предотвратить любые риски инъекций. Если вы еще этого не сделали, проверьте конфигурацию nh3, чтобы убедиться, что он удаляет или экранирует любые теги, атрибуты или протоколы (например, javascript: в URL), которые могут создавать XSS-уязвимости.

  2. Дважды проверьте огражденные блоки кода и подсветку: Поскольку вы разрешаете fenced_code и codehilite, которые добавляют классы и стили к элементам <code> и <pre>, убедитесь, что nh3 не удаляет необходимые атрибуты, требуемые для подсветки кода. Вам может потребоваться разрешить определенные атрибуты class, если вы используете CSS для подсветки синтаксиса.

  3. Регулярно просматривайте nh3 обновления : Библиотеки, подобные nh3, периодически обновляются для улучшения безопасности. Следите за ее обновлением, чтобы убедиться, что она содержит последние исправления безопасности, особенно если есть обновления, устраняющие новые проблемы дезинфекции или уязвимости.

  4. Тестирование: Перед развертыванием неплохо бы тщательно протестировать эту установку, особенно попробовав вставить различные типы потенциально опасного содержимого (например, теги <script>, iframe, встроенные обработчики событий, такие как onclick). Это поможет вам убедиться, что nh3 адекватно обеззараживает содержимое.

Вернуться на верх