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

时间:2012-11-23 08:32:11

标签: html django xss

我想在Django中净化用户输入。

我知道有Django Html Purifier但也许有更轻松的东西?如果我想让用户使用的标签非常有限,例如,只是<b>?也许我可以使用内置的Django?

2 个答案:

答案 0 :(得分:5)

通常使用从PHP实现派生的

django-bleach

项目在这里:https://bitbucket.org/ionata/django-bleach

它的使用非常简单,根据文档似乎可以做你想要的:

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

干杯:)

答案 1 :(得分:3)

Python有一个HTML Parser用于处理字符串中的标记。请同时查看this question

您可以在此模块的顶部为您的用例撰写内容。例如

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>')