Так как косые черты могут встречаться только в строках внутри сериализованного объекта JSON и не экранируются (в настройках по умолчанию), используя
json.dump(some_dict).replace('/', r'\/')
надежно работает, но выглядит хаки.
Я знаю, что передние косые черты не должны быть экранированы, но вы можете избегать их, и для моей утилиты я бы хотел, чтобы они были экранированы.
Есть ли способ, чтобы позволить JSONEncoder сбежать с помощью косой черты без ручного экранирования?
Удалять только косые черты, когда encode_html_chars = True
Проверьте это - https://github.com/esnme/ultrajson/pull/114
Спецификация JSON говорит, что передние слайсы должны скрываться неявно.
Вот решение, чтобы сделать это в самом JSONEncoder. Просто, что вы создаете СЦЕНАРИЙ ESCAPE и делаете вычисления перед рукой и позже делаете кодировку.
Надеюсь, что это поможет.
-
Добавляя к вышеуказанному решению, есть еще одна причина избежать символов. Как сказал kay, это дает нам дополнительный сон. Он предотвращает атаку. Таким образом, решение выше заботится обо всех проблемах.
ESCAPE_DCT = {
# escape all forward slashes to prevent </script> attack
'/': '\\/',
'\\': '\\\\',
'"': '\\"',
'\b': '\\b',
'\f': '\\f',
'\n': '\\n',
'\r': '\\r',
'\t': '\\t',
}