【问题标题】:How in Django/Python can I ensure safety from WYSIWYG-entered HTML?如何在 Django/Python 中确保所见即所得 HTML 的安全性?
【发布时间】:2017-03-10 18:23:30
【问题描述】:

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

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

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

如果有的话,最好的解决方案是什么?

【问题讨论】:

  • 您查看过类似bleach 的内容吗?它完全符合您的描述。它允许某些标签通过并用< >替换恶意标签
  • 我认为你可以创建一个自定义过滤器like this...

标签: python django security xss sanitization


【解决方案1】:

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

如果您选择使用 markdown(或其他非 html 标记)编辑器,您也可能会保存 markdown 源代码并在服务器端生成和清理 html(生成后!)。这使您可以保持原样(使用内联 html 等)降价,因为 html 是经过净化的渲染后的。但是,如果您的客户端编辑器支持预览,则在从服务器加载 markdown 时,您还需要非常小心浏览器渲染!大多数降价编辑器都为此目的包含客户端消毒剂。

【讨论】:

    猜你喜欢
    • 2014-03-18
    • 2018-08-28
    • 2014-03-29
    • 1970-01-01
    • 2022-01-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多