【问题标题】:Server side validation for CKEditor user input (django)CKEditor 用户输入的服务器端验证(django)
【发布时间】:2017-05-09 20:16:23
【问题描述】:

我想在我的应用程序中使用 CKEditor,用户(任何人)都可以在其中发布文章,但我不确定它是否安全。我必须在 django 模板中渲染时将 CKEditor 中的文本标记为“安全”以获得预期的结果。根据 Django 文档,不建议关闭来自未知来源的转义输入文本。甚至 CKEditor 都提到输入应该是干净的 HTML。

CKEditor 可以用于我的用例吗?如果是这样,我需要一些建议来避免任何安全问题。谢谢!

【问题讨论】:

    标签: django ckeditor


    【解决方案1】:

    您可以编写一个 CKEditor 小部件来清理您的不受信任的输入,例如添加后的漂白库。根据您的需要调整标签:

    import bleach
    from ckeditor.fields import RichTextField
    
    ALLOWED_TAGS = set(bleach.ALLOWED_TAGS + [ 
        'a', 'blockquote', 'code', 'del', 'dd', 'dl', 'dt', 
        'h1', 'h2', 'h3', 'h3', 'h4', 'h5', 'i', 'img', 'kbd', 
        'li', 'ol', 'ul', 'p', 'pre', 's', 'sup', 'sub', 'em', 
        'strong', 'strike', 'ul', 'br', 'hr' ]) 
    
    ALLOWED_STYLES = set(bleach.ALLOWED_STYLES + [ 
        'color', 'background-color', 'font', 'font-weight', 
        'height', 'max-height', 'min-height', 
        'width', 'max-width', 'min-width', ]) 
    
    ALLOWED_ATTRIBUTES = {}   
    ALLOWED_ATTRIBUTES.update(bleach.ALLOWED_ATTRIBUTES) 
    ALLOWED_ATTRIBUTES.update({ 
        '*': ['class', 'title'], 
        'a': ['href', 'rel'], 
        'img': ['alt', 'src', 'width', 'height', 'align', 'style'], 
    })
    
    
    def bleach_clean(html): 
        """ Cleans given HTML with bleach.clean() """ 
        return bleach.clean(
            html, 
            tags=ALLOWED_TAGS, 
            attributes=ALLOWED_ATTRIBUTES, 
            styles=ALLOWED_STYLES, 
            strip=True
        ) 
    
    
    class RichTextBleachField(RichTextField):
        def __init__(self, *args, **kwargs): 
            super(RichTextBleachField, self).__init__(*args, **kwargs) 
        def to_python(self, value): 
            return bleach_clean(value) 
    

    我们将它用于一些安全受限的项目,并且效果很好。 Bleach 还知道如何修复损坏的 HTML,因此我们可以使用非常容易与模型和表单等类似的字段进行免费验证。

    【讨论】:

    • 谢谢!真的很感激。这应该可以解决我的问题,因为您已经在使用它。将在接下来的几天内尝试。会更新你。
    • 刚刚尝试过.. 我正要删除此功能,但感谢您,它现在是我项目的一部分。
    • 很高兴听到!祝你圣诞快乐,祝你的项目好运。
    猜你喜欢
    • 1970-01-01
    • 2021-12-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-02-05
    • 2011-06-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多