настройка фильтра безопасных шаблонов django

#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. не пробовал, не могли бы вы, пожалуйста, протестировать и посмотреть, чтобы мы могли улучшить, если это повлияет.