将复杂值安全地序列化为HTML元素属性

问题描述 投票:0回答:1

[当我必须通过Django模板将复杂值(例如,字典列表)传输到前端时,我通常使用json_script尝试防止XSS向量。

最近,我开始使用lit-element,它有一种巧妙的方法,可以从您的自定义元素中提取属性值并将其作为属性提供给组件。您可以说:

<my-element items="{{ serialized array of items }}"></my-element>

然后lit-element将采用传递给items属性的任何字符串值,并对其调用JSON.parse(),因此我需要一种将值序列化为JSON的方法。

由于这本身比较琐碎,所以我最初的想法是编写一个自定义模板过滤器,并尝试匹配json_script如何转义值。但是随后我阅读了该函数的source,它明确指出:

用其Unicode转义符转义所有HTML / XML特殊字符,因此可以安全地将值输出到任何地方[[标签属性内除外。

这听起来像属性值可能是更严重的XSS向量。所以我想我的问题是-如何将数据(在Django / Python中)序列化为JSON,以便可以在标记属性值中安全使用?
django xss lit-element
1个回答
0
投票
django中有一个专门用于此目的的实用程序。 format_html。您传入的html仍将保留未转义,但转入的所有要插值的值均已转义:

format_html

通过在模板标签中使用此标签,我确定您可以实现所需的结果。 
© www.soinside.com 2019 - 2024. All rights reserved.