6

我接受 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

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

{{ object.content|safe|capfirst }}

但是,如果您发布:

0;url=javascript:alert('hi');" http-equiv="refresh

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

4

1 回答 1

2

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

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

默认情况下,Django会转义您的模板变量:

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

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

在 django 模板中渲染之前剥离 javascript 代码

另一方面,如您所见, safe_modeon会markdown删除文本中的任何 HTML 。[HTML REMOVED]

所以移除safe应该足以让它安全,

于 2012-11-22T22:16:22.170 回答