【问题标题】:preventing xss hole in django防止django中的xss漏洞
【发布时间】:2013-02-16 17:53:42
【问题描述】:
在 Django 文档中它说:
Django 模板转义特定字符,这些字符特别
对 HTML 很危险。虽然这可以保护用户免受大多数恶意
输入,也不是万无一失的。例如,它不会保护
以下:
<style class={{ var }}>...</style>
如果 var 设置为 'class1 onmouseover=javascript:func()',这可以
导致未经授权的 JavaScript 执行,具体取决于
浏览器呈现不完美的 HTML。
我怎样才能防止这种情况发生?
【问题讨论】:
标签:
html
django
security
django-templates
xss
【解决方案1】:
我对 Django 不是特别熟悉,但在我看来,他们打算指出的错误是属性值周围没有引号,这意味着示例值中的空格会导致字符串的其余部分(onmouseover=...) 被解释为一个单独的属性。相反,您应该像这样加上引号:
<style class="{{ var }}">...</style>
如果我理解正确,这将是安全的,因为所有可能干扰引用的字符都被转义了。您可能想验证该解释;例如,编写<span title="{{ var }}">foo</span>,运行模板并将foo 设置为<>"'&,然后确保它们在HTML 中正确转义,并且title 以原始字符出现在浏览器中。