настройка фильтра безопасных шаблонов Django - PullRequest
1 голос
/ 26 марта 2019

Я использую текстовый редактор для комментариев пользователей. но мне нужно ограничить HTML-теги, которые пользователи вводят в текстовом редакторе, чтобы избежать xss-атак.

я знаю, что safe шаблонный фильтр - лучший выбор. но в качестве примера я бы просто принял некоторые теги типа <p>,<a>,<h3>, а не img,script,.... проблема в том, что фильтр safe принимает все теги html.

Я ищу что-то вроде этого:

{{user.reply|safe:'<p>,<h3>,<a>'}}

ответом являются html-теги richtext клиента. и safe flter просто принимает p,a,h3 теги.

Я использую текстовый редактор froala, а также знаю, как ограничить параметры текстового редактора. но если пользователь попытается вставить какой-либо тег <script>, он не сможет его отменить.

как я могу настроить фильтр safe? или какой фильтр больше подходит для этой работы?

1 Ответ

0 голосов
/ 26 марта 2019

Вы должны написать пользовательский фильтр для этого

Вы можете установить и использовать 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'}}

...