为什么simplejson编码器使用\\u0026代替&,让XSS发生?

4 投票
1 回答
752 浏览
提问于 2025-04-18 11:17

我正在尝试自动对进入 JSON 对象的字符串进行 HTML 转义。simplejson 有一个叫做 JSONEncoderForHTML 的功能,正好可以做到这一点。下面是它如何进行 HTML 转义的:

chunk = chunk.replace('&', '\\u0026')
chunk = chunk.replace('<', '\\u003c')
chunk = chunk.replace('>', '\\u003e')

1) 为什么它使用这些代码,而不是 cgi.escape 使用的 HTML 编码呢?

cgi.escape 的做法是:

chunk = chunk.replace('&', '&amp;')
chunk = chunk.replace('<', '&lt;')
chunk = chunk.replace('>', '&gt;')

它们各自的说明是:

simplejson: 为了将 JSON 内容嵌入到网页的脚本标签中,字符 &, < 和 > 需要被转义。 它们不能用通常的实体(例如 &)来转义,因为在

1 个回答

0

JSONEncoderForHTML可以让JSON在<script>标签中使用时更安全,但它并不能满足你的需求,而且用这个库也没有合适的方法来实现你想要的功能。

撰写回答