Django/Python 如何确保所见即所得输入的安全性 HTML?

How in Django/Python can I ensure safety from WYSIWYG-entered HTML?

我想消除 Web 应用程序中的 XSS / JavaScript 注入漏洞,允许用户使用像 CKEditor 这样的编辑器,它允许任意 HTML(以及我具体选择的编辑器是否允许任意 HTML 或不允许,blackhats 将能够提交任意 HTML 无论如何)。所以没有 JavaScript,无论是 SCRIPT 标签、ONCLICK 和系列,还是其他任何东西。目标平台是Python和Django.

我最好的选择是什么?我对将标签和属性列入白名单的实现持开放态度;也就是说,我认为没有必要允许用户提交您可以在 HTML 中构建的所有内容,而只删除 JavaScript。我很高兴拥有支持标签可用性的富文本,可以允许相当富有表现力的富文本。我也会对生成 Markdown 的编辑器持开放态度,并在保存数据之前删除所有 HTML 标签。 (HTML 操作看起来更简单,但我也会考虑 Markdown 实现的解决方案。)

我也不认为有必要生成经过清理的文本,否则会抛出一个异常,表明提交未通过测试。 (因此,将字符串小写并搜索“

如果可以选择的话,我在解决方案中的第一选择可能是标签和属性名称的白名单。

最好的解决方案是什么?

如果您选择使用生成 HTML 的所见即所得编辑器,在服务器上使用 bleach 来清理您的 HTML(通过白名单)可能就足够了。

如果您选择使用 Markdown(或其他非 html 标记)编辑器,您还可能会保存 Markdown 源并生成和清理 html(生成后!)服务器端。这允许您保持降价不变(使用内联 html 等),因为 html 已清理 post 渲染。但是,如果您的客户端编辑器支持预览,则当从服务器加载 markdown 时,您还需要非常小心浏览器渲染!为此,大多数降价编辑器都包括客户端消毒剂。