Django:安全验证不受信任的HTML输入

Django:安全验证不受信任的HTML输入,html,django,xss,Html,Django,Xss,我想在Django中净化用户输入 我知道有,但也许有更轻的?如果我希望允许用户使用的标记非常有限,例如仅,该怎么办?也许我可以使用内置的Django?Python有一个用于处理字符串中的标记的函数。也请看一看 您可以在这个模块的顶部为您的用例写一些东西。比如说 from HTMLParser import HTMLParser VALID_TAGS = ['b', 'a', 'strong'] class ForbiddenHTMLException(Exception): pass

我想在Django中净化用户输入

我知道有,但也许有更轻的?如果我希望允许用户使用的标记非常有限,例如仅
,该怎么办?也许我可以使用内置的Django?

Python有一个用于处理字符串中的标记的函数。也请看一看

您可以在这个模块的顶部为您的用例写一些东西。比如说

from HTMLParser import HTMLParser

VALID_TAGS = ['b', 'a', 'strong']

class ForbiddenHTMLException(Exception):
    pass

class MyHTMLParser(HTMLParser):
    def handle_starttag(self, tag, attrs):
        if tag in VALID_TAGS:
            pass
        else:
            raise ForbiddenHTMLException

def validate(html):
    parser = MyHTMLParser()
    try:
        parser.feed(html)
        return True
    except ForbiddenHTMLException:
        return False

print validate('<b>This is bold Text</b>')
print validate('<p>This is not inside b tag.</p>')
从HTMLParser导入HTMLParser
有效的_标记=['b','a','strong']
类禁止HtmlexException(异常):
通过
类MyHtmlPasser(HtmlPasser):
def句柄\u开始标记(自身、标记、属性):
如果标记在有效的\u标记中:
通过
其他:
提出禁止性异常
def验证(html):
parser=MyHTMLParser()
尝试:
提要(html)
返回真值
除禁止HTMLException外:
返回错误
打印验证('这是粗体文本')
打印验证(“这不在b标记内。

”)
通常使用从PHP实现派生的django漂白剂

项目在这里:

它的用法非常简单,根据文档,它似乎可以满足您的需求:

# Which HTML tags are allowed
BLEACH_ALLOWED_TAGS = ['p', 'b', 'i', 'u', 'em', 'strong', 'a']

干杯:)

但是我必须实现我自己的解析——我不希望用户无法保存评论,我只想清除潜在的恶意标签。谢谢,我不知道它是否存在;我想这比使用净化器要好,因为它是纯的python@RobertJ. 我最终使用了漂白剂,如果你将其作为答案发布,我会接受它。Django
Bleach
:-(请注意,Django Bleach是漂白剂的包装,使其成为Django应用程序)