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

Chr*_*ard 5 python security django xss sanitization

我想消除Web应用程序中XSS / JavaScript注入的漏洞,在该Web应用程序中,允许用户使用允许任意HTML的CKEditor之类的编辑器(无论我选择的编辑器是否允许任意HTML,blackhats都可以提交任意HTML还是HTML)。因此,没有JavaScript,无论是SCRIPT标签,ONCLICK和Family,还是其他任何JavaScript。目标平台是Python和Django。

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

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

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

有什么最好的解决方案(如果有)?

Udi*_*Udi 4

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

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