在 Django 文档中它说:
Django 模板会转义对 HTML 特别危险的特定字符。虽然这可以保护用户免受大多数恶意输入的影响,但它并非完全万无一失。例如,它不会保护以下内容:
<style class={{ var }}>...</style>
如果 var 设置为 'class1 onmouseover=javascript:func()',这可能导致未经授权的 JavaScript 执行,具体取决于浏览器如何呈现不完美的 HTML。
我怎样才能防止这种情况?
在 Django 文档中它说:
Django 模板会转义对 HTML 特别危险的特定字符。虽然这可以保护用户免受大多数恶意输入的影响,但它并非完全万无一失。例如,它不会保护以下内容:
<style class={{ var }}>...</style>
如果 var 设置为 'class1 onmouseover=javascript:func()',这可能导致未经授权的 JavaScript 执行,具体取决于浏览器如何呈现不完美的 HTML。
我怎样才能防止这种情况?
您可以做的一件事是不允许变量类。你可以使用类似的东西
<style class={% if class_foo %}foo{% elif class_bar %}bar{% else %}baz{% endif %}>...</style>
还有一些过滤器可用于防止其他地方的 xss:https ://docs.djangoproject.com/en/dev/ref/templates/builtins/#std:templatefilter-escape
我对 Django 不是特别熟悉,但在我看来,他们打算指出的错误是属性值周围没有引号,这意味着示例值中的空格会导致字符串的其余部分 ( onmouseover=...
)被解释为一个单独的属性。相反,您应该像这样加上引号:
<style class="{{ var }}">...</style>
如果我理解正确,这将是安全的,因为所有可能干扰引用的字符都被转义了。您可能想验证该解释;例如, write ,使用set to<span title="{{ var }}">foo</span>
运行模板,然后确保它们在 HTML 中正确转义,并且在浏览器中显示为原始字符。foo
<>"'&
title