1

在 Django 文档中它说:

Django 模板会转义对 HTML 特别危险的特定字符。虽然这可以保护用户免受大多数恶意输入的影响,但它并非完全万无一失。例如,它不会保护以下内容:

 <style class={{ var }}>...</style>

如果 var 设置为 'class1 onmouseover=javascript:func()',这可能导致未经授权的 JavaScript 执行,具体取决于浏览器如何呈现不完美的 HTML。

我怎样才能防止这种情况?

4

2 回答 2

1

您可以做的一件事是不允许变量类。你可以使用类似的东西

<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

于 2013-03-02T06:00:31.830 回答
1

我对 Django 不是特别熟悉,但在我看来,他们打算指出的错误是属性值周围没有引号,这意味着示例值中的空格会导致字符串的其余部分 ( onmouseover=...)被解释为一个单独的属性。相反,您应该像这样加上引号:

<style class="{{ var }}">...</style>

如果我理解正确,这将是安全的,因为所有可能干扰引用的字符都被转义了。您可能想验证该解释;例如, write ,使用set to<span title="{{ var }}">foo</span>运行模板,然后确保它们在 HTML 中正确转义,并且在浏览器中显示为原始字符。foo<>"'&title

于 2013-03-02T06:37:44.407 回答