【发布时间】:2013-08-05 14:11:51
【问题描述】:
我正在创建一个将处理用户提交的内容的应用。我想让用户使用基本的 html 标记(即 )使他们的基于文本的内容看起来很漂亮。但是我确实想阻止他们使用脚本标签之类的东西。 Django 会自动转义所有内容,因此它也会禁用所有安全标记。我可以使用以下方法禁用它:
{{ somevar|safe }} 或 {% autoescape off %}
不过,这也会启用所有有害的脚本标签。 Django 确实提供了换行符过滤器标签,它可以将空格转换为 br 或 p 标签,同时保持 html 安全:
{{ somevar|linebreaks }}
很遗憾,我不知道有任何过滤器允许使用 b 或 i 标签。
所以我想知道这个问题是否有一个聪明的解决方案。如果您建议第三方库,最好在保存模型或渲染内容时使用该解决方案。
更新
最后我选择了这个解决方案Python HTML sanitizer / scrubber / filter。后一个答案提供了一种使用 Beautiful Soup 库从用户提交的内容中删除所有不需要的 html 标记的方法。这可以在保存模型之前完成,因此在渲染页面时可以安全地使用模板过滤器{{ somevar|safe }}。
【问题讨论】:
标签: html django django-templates html-content-extraction