为什么simplejson编码器使用\\u0026代替&,让XSS发生?
我正在尝试自动对进入 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('&', '&')
chunk = chunk.replace('<', '<')
chunk = chunk.replace('>', '>')
它们各自的说明是:
simplejson: 为了将 JSON 内容嵌入到网页的脚本标签中,字符 &, < 和 > 需要被转义。 它们不能用通常的实体(例如 &)来转义,因为在
1 个回答
0
JSONEncoderForHTML可以让JSON在<script>
标签中使用时更安全,但它并不能满足你的需求,而且用这个库也没有合适的方法来实现你想要的功能。