Использование 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
адекватно обеззараживает содержимое.