由于斜杠只能发生在一个JSON序列化对象的字符串内,并没有逃脱(默认设置),使用json.dumps():逃避斜线
json.dump(some_dict).replace('/', r'\/')
可靠地工作,但它看起来哈克。
我知道,正斜杠不必是逃过一劫,但你可以逃脱他们,为我的用例,我希望让他们逃脱。
有没有办法让JSONEncoder在没有手动转义的情况下转发正斜杠?
由于斜杠只能发生在一个JSON序列化对象的字符串内,并没有逃脱(默认设置),使用json.dumps():逃避斜线
json.dump(some_dict).replace('/', r'\/')
可靠地工作,但它看起来哈克。
我知道,正斜杠不必是逃过一劫,但你可以逃脱他们,为我的用例,我希望让他们逃脱。
有没有办法让JSONEncoder在没有手动转义的情况下转发正斜杠?
只有逃避斜线时encode_html_chars =真
退房这个 - https://github.com/esnme/ultrajson/pull/114
的JSON规范说向前slahes被隐式逃脱。
下面是在JSONEncoder本身做的解决方案。它只是你创建一个ESCAPE DICTIONARY,并做手动计算,然后做编码。
希望它能帮助。
-
添加到上述溶液中,还有另一个原因逃脱的字符。由于kay说,它给了我们一些额外的睡眠。它可以防止这种攻击。所以上面的解决方案处理所有问题。
ESCAPE_DCT = {
# escape all forward slashes to prevent </script> attack
'/': '\\/',
'\\': '\\\\',
'"': '\\"',
'\b': '\\b',
'\f': '\\f',
'\n': '\\n',
'\r': '\\r',
'\t': '\\t',
}
为什么你需要逃避它们?什么用例需要转义?任何合理的JSON解码器都应该能够处理未转义的正斜杠。 – Kevin 2014-11-25 14:49:57
在json中不需要转义正斜杠,所以没有理由期望json编码器支持斜线(或任何其他任意字符)。 – 2014-11-25 14:51:16
'dumps('')=='“”''。我没有遇到任何问题,但我会睡得更好,如果'倾销('')=='“<\\/script>”''。 :-)我不会称正斜杠为“任意字符”。它是六个ASCII字符之一,它们有一个转义码,尽管你不必转义它们。 – kay 2014-11-25 14:59:38