【问题标题】:Django: Safely validating untrusted HTML inputDjango:安全验证不受信任的 HTML 输入
【发布时间】:2012-11-23 08:32:11
【问题描述】:

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

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

【问题讨论】:

  • 谢谢,不知道有没有;我想它比使用 Purifier 更好,因为它是纯 python
  • @RobertJ。我最终使用了 Bleach,如果您将其作为答案发布,我会接受。
  • Django recommends bleach : github.com/jsocol/bleach -(请注意,django-bleach 是漂白剂的包装,使其成为 Django 应用程序)

标签: html django xss


【解决方案1】:

django-bleach 派生自 PHP 实现是常用的。

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

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

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

干杯:)

【讨论】:

    【解决方案2】:

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

    【讨论】:

    • 但是我必须实现自己的解析——我不希望用户无法保存评论,我只想摆脱潜在的恶意标签。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-01-28
    • 1970-01-01
    • 1970-01-01
    • 2022-12-23
    • 2011-08-23
    • 1970-01-01
    • 2012-07-05
    相关资源
    最近更新 更多