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 来转义这些恶意脚本?
I am using Markdown in an app to display a user biography. I want the user to be able to slightly format the biography, so I'm letting them use the TinyMCE editor.
Then, displaying it in the Django Template like this
{% load markup %}
<div id="biography">
{{ biography|markdown }}
</div>
The problem is, if there is a tag in the biography, it is not being escaped as django does everywhere else. This is the source output from a biography test:
<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>
How do I set Markdown to escape these malicious scripts?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
根据 django.contrib.markup.templatetags.markup.markdown 的文档字符串:
这应该有效:
According to
django.contrib.markup.templatetags.markup.markdown
's docstrings:This should work:
安全模式下的 Markdown 会删除所有 html 标签,这意味着您的用户无法在传记中输入 HTML 片段。在某些情况下,这不是优选的。我建议您在降价之前使用force_escape,这样任何输入降价的内容都是安全的。
例如,如果您的简介是
我真的是 HTML 粉丝!
,则使用将产生
HTML REMOVED
.. 相反,如果您使用输出会是这样的
Markdown in safe mode would remove all html tags, which means your users cannot input HTML segments in the biography. In some cases, this is not preferable. I would recommend you use force_escape before markdown, so anything fed into markdown is safe.
For example, if your biography is
<html>I'm really a HTML fan!</html>
, usingwould produce
HTML REMOVED
.. Instead, if you useThe output would be something like