python - 我如何在 Django/Python 中确保所见即所得输入 HTML 的安全性?

标签 python django security xss sanitization

我想消除 Web 应用程序中的 XSS/JavaScript 注入(inject)漏洞,允许用户使用像 CKEditor 这样允许任意 HTML 的编辑器(无论我选择的编辑器是否允许任意 HTML,blackhats 都可以提交任意 HTML)。所以没有 JavaScript,无论是 SCRIPT 标签、ONCLICK 和家族,还是其他任何东西。目标平台为Python和Django。

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

我也不认为有必要生成经过净化的文本,而是抛出一个表明提交未通过测试的异常。 (因此,将字符串小写并搜索“<script”、“onclick”等可能就足够了。)

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

最好的解决方案是什么?

最佳答案

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

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

关于python - 我如何在 Django/Python 中确保所见即所得输入 HTML 的安全性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42725293/

相关文章:

security - 从一个 HTTPS 站点向另一个 HTTPS 站点提交表单是否安全?

python - 错误“只能比较相同标记的系列对象”和 sort_index

当使用任何属性时,Python模拟创建一个假对象返回字典

security - Grails项目登录插件

javascript - 保护 JavaScript 对象免受外部脚本的影响

python - celery 4.0.0 : No such transport: django

python - numpy/scipy/ipython :Failed to interpret file as a pickle

python - 假设 n > k 如何从 n 个数字的列表中找到 k 个最大的数字

python - 如何找到 2 的一个非常大的数模 10^9 的幂

python - 评论未添加到数据库