#python #django #django-templates #rich-text-editor
#python #django #django-шаблоны #форматированный текстовый редактор
Вопрос:
я использую форматированный текстовый редактор для ответов на комментарии пользователей. но мне нужно ограничить html-теги, которые пользователи вводят в текстовом редакторе, чтобы избежать xss-атак.
я знаю, что safe
фильтр шаблонов — лучший выбор. но в качестве примера я бы просто принял некоторые теги, такие как <p>,<a>,<h3>
not img,script,...
. проблема в том, что safe
filter принимает все теги html.
я ищу что-то вроде этого:
{{user.reply|safe:'<p>,<h3>,<a>'}}
какой ответ является HTML-тегами клиента richtext.
а safe
flter просто принимает p,a,h3
теги.
я использую форматированный текстовый редактор froala, а также знаю, как ограничить параметры текстового редактора. но если пользователь попытается вставить какой-нибудь <script>
тег, он не сможет понять.
как я могу настроить safe
фильтр? или какой фильтр больше подходит для этой работы?
Ответ №1:
Для этого вам следует написать пользовательский фильтр
вы можете установить и использовать BeautifulSoup
from bs4 import BeautifulSoup
from django import template
register = template.Library()
@register.filter(name='includeHtmlTags')
def includeHtmlTags(value, arg):
include=arg.split(",")
soup=BeautifulSoup(text, 'html.parser')
return_value=''
for tag in include:
for i in soup.findAll(tag):
return_value = i
return return_value
В вашем шаблоне загружается {% load includeHtmlTags %}
сверху
и использовать, как {{user.reply|includeHtmlTags:'p,h3,a'}}
Комментарии:
1. не пробовал, не могли бы вы, пожалуйста, протестировать и посмотреть, чтобы мы могли улучшить, если это повлияет.