Реклама

Шлюз увидел «user», сервис увидел «admin», а JSON был один и тот же

#Шлюз #JSON #Разбираемся #JSON-парсеры #Разобрать
Шлюз увидел «user», сервис увидел «admin», а JSON был один и тот же

Шлюз проверил JSON и пропустил запрос, а сервис за ним выдал пользователю права администратора. Оба компонента отработали корректно, но по-разному интерпретировали одни и те же данные. Разбираемся, почему JSON-парсеры расходятся в обработке ключей и чисел, к каким ошибкам это приводит и как защитить от них API. Разобрать уязвимости

Привет, Хабр!

Принято считать, что JSON — самая скучная часть системы. Формат простой, парсер есть в любом языке, сломаться там нечему. Скорее спорят, как назвать поле, чем о том, что оно значит.

На деле JSON описывает синтаксис и почти ничего не говорит о смысле.

Что делать с двумя одинаковыми ключами в одном объекте, сколько знаков держит число, можно ли записать NaN — на всё это стандарт отвечает «на усмотрение реализации». Каждая библиотека усмотрела по‑своему.