Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Django XSS safe中的降价_Python_Django_Xss_Markdown - Fatal编程技术网

Python Django XSS safe中的降价

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在其他地方那样被逃避。这是传记测试的源输出: <

我在应用程序中使用降价来显示用户传记。我希望用户能够稍微格式化传记,所以我让他们使用TinyMCE编辑器

然后,在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>&lt;html&gt;I'm really a HTML fan!&lt;/html&gt</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代码示例的情况?