[当我必须通过Django模板将复杂值(例如,字典列表)传输到前端时,我通常使用json_script尝试防止XSS向量。
最近,我开始使用lit-element,它有一种巧妙的方法,可以从您的自定义元素中提取属性值并将其作为属性提供给组件。您可以说:
<my-element items="{{ serialized array of items }}"></my-element>
然后lit-element将采用传递给items
属性的任何字符串值,并对其调用JSON.parse()
,因此我需要一种将值序列化为JSON的方法。
由于这本身比较琐碎,所以我最初的想法是编写一个自定义模板过滤器,并尝试匹配json_script
如何转义值。但是随后我阅读了该函数的source,它明确指出:
这听起来像属性值可能是更严重的XSS向量。所以我想我的问题是-如何将数据(在Django / Python中)序列化为JSON,以便可以在标记属性值中安全使用?用其Unicode转义符转义所有HTML / XML特殊字符,因此可以安全地将值输出到任何地方[[标签属性内除外。
format_html
。您传入的html仍将保留未转义,但转入的所有要插值的值均已转义:format_html
通过在模板标签中使用此标签,我确定您可以实现所需的结果。