gpt4 book ai didi

django - CKEditor 用户输入的服务器端验证 (django)

转载 作者:行者123 更新时间:2023-12-02 17:22:51 25 4
gpt4 key购买 nike

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

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

最佳答案

您可以编写一个 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,因此我们可以使用非常易于与模型和类似表单一起使用的字段进行免费验证。

关于django - CKEditor 用户输入的服务器端验证 (django),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41313054/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com