Python Django XSS safe中的降价
我在应用程序中使用降价来显示用户传记。我希望用户能够稍微格式化传记,所以我让他们使用TinyMCE编辑器 然后,在Django模板中显示它,如下所示Python Django XSS safe中的降价,python,django,xss,markdown,Python,Django,Xss,Markdown,我在应用程序中使用降价来显示用户传记。我希望用户能够稍微格式化传记,所以我让他们使用TinyMCE编辑器 然后,在Django模板中显示它,如下所示 {% load markup %} <div id="biography"> {{ biography|markdown }} </div> {%load markup%} {{传记| markdown} 问题是,如果传记中有一个标签,它就不会像django在其他地方那样被逃避。这是传记测试的源输出: <
{% load markup %}
<div id="biography">
{{ biography|markdown }}
</div>
{%load markup%}
{{传记| markdown}
问题是,如果传记中有一个标签,它就不会像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>
asdfsdfsadf
SDFDSFSDSDFSDFDSFSDFSDF
sdafasdf
文件.地点:http://test.com'
如何设置标记以逃避这些恶意脚本?根据
django.contrib.markup.templatetags.markup.markup
的docstring:
启用安全模式,该模式剥离原始HTML并仅返回HTML
根据实际的降价语法生成,将“safe”作为第一个
列表中的扩展名
这应该起作用:
{{ biography|markdown:"safe" }}
安全模式下的标记将删除所有html标记,这意味着您的用户无法在传记中输入html段。在某些情况下,这是不可取的。我建议你在降价前使用强制逃生,这样任何输入降价的东西都是安全的 例如,如果你的传记是
,我真的是一个HTML迷代码>,使用
{{ biography|markdown:"safe"}}
将生成删除的HTML
。。相反,如果您使用
{{ biography|force_escape|markdown }}
输出将类似于
<p><html>I'm really a HTML fan!</html></p>
htmlI我真的是个HTML迷/html>
这似乎是一种自然的方法,但我认为它实际上是不安全的。示例:“[clickme](javascript:alert%28%22xss%22%29)
”。有关更多详细信息,请参阅我的解释。@D.W.markdown(html,safe\u mode='escape')
现在似乎对我很有效。有什么问题吗?有。您建议使用force|escape | markdown
,问题是它不安全:它不使用安全标志调用markdown,因此对于我描述的那种攻击是不安全的。有关详细说明,请参见我提供的链接。尝试markdown(force_escape(“[clickme](javascript:alert%28%22xss%22%29)”)
“看看我的意思;结果中包含了javascript。是否有一种简单的方法来处理传记
包含您想要显示的HTML代码示例的情况?