Django - безопасно отображать HTML в шаблоне - PullRequest
0 голосов
/ 18 марта 2020

Я создаю веб-приложение django, в котором пользователь может отправлять текст с помощью редактора tinymce.

Для этой задачи я использую расширение django-tinymce.

вопрос:

Безопасно ли отображать HTML в шаблоне, используя фильтр safe, как это? :

{{ richtext | safe }}

Если нет, как это можно сделать безопасным?

1 Ответ

1 голос
/ 18 марта 2020

Если html исходит из надежного источника, такого как вы, то это (скорее всего) безопасно. Но если вы разрешаете пользователям вашего сайта отправлять свою собственную html разметку, то это небезопасно.

Но иногда необходимо отображать разметку html в шаблонах django, и нет другого выбора, кроме как использовать фильтр safe. В этих случаях решение состоит в том, чтобы «санировать» код html.

«Очистка» означает, что вы сохраняете в данных только безопасные теги html и удаляете все небезопасные или нежелательные теги (например, теги script или style).


Для санации данных вы можете использовать библиотеку bleach.

Вот пример (взят из документации):

import bleach

bleach.clean('an <script>evil()</script> example')

# Output -> u'an &lt;script&gt;evil()&lt;/script&gt; example'

Для этой библиотеки также есть приложение django: django-bleach.

...