【问题标题】: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>
    

    如果我理解正确,这将是安全的,因为所有可能干扰引用的字符都被转义了。您可能想验证该解释;例如,编写&lt;span title="{{ var }}"&gt;foo&lt;/span&gt;,运行模板并将foo 设置为&lt;&gt;"'&amp;,然后确保它们在HTML 中正确转义,并且title 以原始字符出现在浏览器中。

    【讨论】:

    • 很好,我什至没有注意到它没有被引用
    • 不确定引号是否是唯一的问题。在最新版本的文档中,他们引用了该属性,但他们说这不安全 - See version 1.7
    【解决方案2】:

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

    <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

    【讨论】:

      猜你喜欢
      • 2012-06-08
      • 1970-01-01
      • 2022-10-06
      • 2023-04-07
      • 1970-01-01
      • 1970-01-01
      • 2021-09-03
      • 1970-01-01
      • 2012-03-10
      相关资源
      最近更新 更多