由於斜槓只能發生在一個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