Django:按照 OWASP 的建议,属性中存在额外的 HTML 字符转义

use*_*ser 6 django xss html-encode html-entities owasp

Django 转义这些字符 : & < > " ',这足以在 HTML 元素中插入数据。但是,如果您想在属性中设置不受信任的数据,OWASP建议转义更多字符:

除字母数字字符外,请使用 &#xHH; 转义 ASCII 值小于 256 的所有字符。格式(或命名实体,如果可用)以防止切换出属性。

原因是,很容易错过属性上的引号,并且未加引号的属性可以用许多字符来分解,包括[space] % * + , - / ; < = > ^ and |

是否有内置函数或库可以实现此目的?

PS 另一篇值得一读的博客文章解释了为什么在某些情况下需要更广泛的转义函数。: http: //wonko.com/post/html-escaping

Mik*_*maa 3

Django 中没有为此提供内置功能。我不知道有什么图书馆。

内置的安全 HTML 过滤器会转义属性和非属性有效负载,因此可能只需要针对属性的附加过滤器功能。

您可以通过在 Django 问题跟踪器中打开针对 Django 的功能请求来建议这一点。

我不确定现有的内置过滤器是否可以更改。我认为将此功能添加到 Django 内置过滤器中可能会破坏许多遗留应用程序。我不是这方面的专家,所以我建议您向 Django 作者进行讨论。与破坏现有 Django 应用程序可能带来的麻烦相比,利用风险非常小,所以我不确定如何接收行为变化。

另一方面,如果您需要记住为每个属性替换编写一个过滤器,您也可以记住简单地关闭引号。我认为这种技术在不将模板作为纯文本处理的框架中更有用。

同时,您还可以尝试通过编写自己的过滤器替换来对 Django 过滤器函数进行猴子修补以执行额外的转义。