Django/Python:将Markdown转换为安全HTML

use*_*171 5 python django markdown django-templates

我接受Markdown并需要将其转换为HTML以在Django中安全渲染.现在我接受form.cleaned_data并将其转换为HTML:

import markdown
html_body = markdown.markdown(body_markdown, safe_mode=True)
html_body = html_body.replace('[HTML_REMOVED]', '')
return html_body
Run Code Online (Sandbox Code Playgroud)

在模板中,我将其渲染为:

{{ object.content|safe|capfirst }}
Run Code Online (Sandbox Code Playgroud)

但是,如果您发布:

0;url=javascript:alert('hi');" http-equiv="refresh
Run Code Online (Sandbox Code Playgroud)

JS将呈现,因此XSS是可能的.

Tim*_*ony 3

django 的内置safe模板标记意味着您将该变量标记为可以输出,即您知道它的内容是安全的:

safe:将字符串标记为在输出之前不需要进一步的 HTML 转义。

Django默认转义你的模板变量:

默认情况下,在 Django 中,每个模板都会自动转义每个变量标签的输出。具体来说,这五个字符被转义了......

但它不会为你剥离 JavaScript(它只会使其无法使用),你需要使用模板标签手动执行此操作:

在 django 模板中渲染之前去除 javascript 代码

另一方面,如您所见,safe_modeonmarkdown会去除文本中的所有 HTML 。[HTML REMOVED]

所以移除safe应该足以保证安全,