4

我正在创建一个将处理用户提交的内容的应用程序。我想让用户使用基本的 html 标记(即 < i > < b > < br > )使他们的基于文本的内容看起来很漂亮。但是我确实想阻止他们使用脚本标签之类的东西。Django 会自动转义所有内容,因此它也会禁用所有安全标记。我可以使用以下方法禁用它:

{{ somevar|safe }}或者{% autoescape off %}

但是,这也会启用所有有害的脚本标签。Django 确实提供了 linebreaks 过滤器标签,它可以将空格转换为 br 或 p 标签,同时保持 html 安全:

{{ somevar|linebreaks }}

不幸的是,我不知道任何允许使用 b 或 i 标签的过滤器。

所以我想知道这个问题是否有一个聪明的解决方案。如果您建议使用第三方库,最好在保存模型或渲染内容时使用该解决方案。


更新

最后,我使用了这个解决方案Python HTML sanitizer/scrubber/filter。后一个答案提供了一种使用 Beautiful Soup 库从用户提交的内容中删除所有不需要的 html 标记的方法。这可以在保存模型之前完成,因此{{ somevar|safe }}在渲染页面时可以安全地使用模板过滤器。

4

1 回答 1

1

看看django-tinymce。它应该为您提供所需的灵活性。在内容进入数据库之前,您将最安全地对其进行清理。TinyMCE 可以配置为允许或不允许您想要的任何标签。

于 2013-08-05T00:20:31.240 回答