Я заново изобретаю колесо и создаю свои собственные методы разбора JSON на Java.
Я пользуюсь (очень приятно!) документацией на json.org. Единственное, в чем я не уверен, так это в том, где написано "или управляющий символ".
Поскольку документация настолько ясна, а JSON настолько прост и удобен в реализации, я решил пойти дальше и потребовать спецификацию, а не расплывчатую.
Как мне правильно удалить управляющие символы в Java? Возможно, есть диапазон юникода?
Редактировать: (обычно?) Отсутствующая часть головоломки
Мне сообщили, что существуют другие управляющие символы за пределами определенный диапазон 1 2< /a> это может вызвать проблемы в тегах <script>
.
В частности, символы U+2028 и U+2029, разделители строк и абзацев, которые действуют как новые строки. Вставка новой строки в середину строкового литерала, скорее всего, вызовет синтаксическую ошибку (незавершенный строковый литерал). 3
Хотя я считаю, что это не представляет угрозы XSS, все же рекомендуется добавить дополнительные правила для использования в тегах <script>
.
- Просто будьте проще и кодируйте все символы, не предназначенные для печати ASCII, с помощью нотации
\u
. Эти персонажи необычны для начала. Если хотите, вы можете добавить в белый список, но я рекомендую подход с белым списком. - Если вы не знаете, не забывайте о
</script
(без учета регистра), что может привести к внедрению HTML-скрипта на вашу страницу с символами</script><script src=http://tinyurl.com/abcdef>
. Ни один из этих символов по умолчанию не закодирован в JSON.
String
в Java хранит строковые данные внутри UTF-16, но Java прекрасно справляется с чтением и записью с использованием других кодировок (включая UTF-8 или Windows-1252 — обе широко используемые — и UTF-32). Возможно, стоит начать отсюда: joelonsoftware.com/articles/Unicode.html - person T.J. Crowder   schedule 19.05.2011