Django如何处理TinyMCE编辑器的转义?
我怎么才能在页面上只显示粗体、斜体和其他没有安全问题的HTML内容呢?
3 个回答
1
如果你想显示所有的HTML内容(不进行转义),可以使用 safe
过滤器。
{{ var|safe }}
在你的情况下,如果你想转义所有内容,但保留某些标签,你可以自己写一个过滤器来实现这个功能:
{{ var|mysafe }}
你可以在这里了解更多信息:http://docs.djangoproject.com/en/dev/howto/custom-template-tags/
这个过滤器的工作流程可以是:
- 先转义所有内容
- 然后只对允许的标签进行反转义(可以使用
.replace
或正则表达式)
2
可能更合理的做法是配置TinyMCE,让用户只能输入你允许的内容。TinyMCE有一套强大的规则来实现这一点。如果你在使用django-tinymce,可以查看这个链接,了解如何设置TINYMCE_DEFAULT_CONFIG
,以便选择你想要的选项。
2
清理HTML代码其实是个挺复杂的事情。那些发垃圾信息的人总是想出新的办法来绕过清理措施。最安全的做法是先列出一个只允许的标签清单,确保只保留这些无害的标签,其他的都要用真正的HTML解析器过滤掉(而不是用正则表达式)。
在djangosnippets.com上,有几个模板标签和过滤器可以用,比如这个或者那个。选择过滤器的时候,要注意它是否使用了白名单,并且使用像lxml.html(最好是lxml.html.clean)或者BeautifulSoup这样的HTML解析器。