Django XSS中的Markdown安全
问题内容:
我在应用程序中使用Markdown来显示用户传记。我希望用户能够略微格式化传记,所以让他们使用TinyMCE编辑器。
然后,将其显示在Django模板中,如下所示
{% load markup %}
<div id="biography">
{{ biography|markdown }}
</div>
问题是,如果传记中有标签,它就不会像django在其他地方所做的那样被转义。这是传记测试的源输出:
<p><strong>asdfsdafsadf</strong></p>
<p><strong>sd<em>fdfdsfsd</em></strong><em>sdfsdfsdfdsf</em>sdfsdfsdf</p>
<p><strong>sdafasdfasdf</strong></p>
<script>document.location='http://test.com'</script>
如何设置Markdown以逃避这些恶意脚本?
问题答案:
根据django.contrib.markup.templatetags.markup.markdown
的文档字符串:
要启用安全模式,该模式将剥离原始HTML并仅返回由实际Markdown语法生成的HTML,请将“安全”作为列表中的第一个扩展名传递。
这应该工作:
{{ biography|markdown:"safe" }}