Українська

Інструменти розробника · JSON форматування & реаніматор

Дублікати ключі в JSON: Що RFC 8259 дозволяє і що робити парсери

· Підземелля

Опубліковано ToolAcre · Редакція журналу

свінгери стандарти введення

Дублікати ключі в JSON: Що RFC 8259 дозволяє і які сердечники роблять ілюстровані з JSON токени і точний контрольний ліміт
Головна ToolAcre векторна ілюстрація

JSON- граматика дозволяє тим же ключем двічі, spec тільки говорить імена 'should' бути унікальними, а парсери незгодні про те, що значення виграє. Цей пост пояснює, чому це стосується правильності та безпеки.

Який 'role' зробив сервер читати?

Розгляд `{"role":"viewer","role":"editor"}`. Обидва члени граматично заповнені, тому ToolAcre звітність JSON. Коли текст досягає `JSON.parse`, отриманий об'єкт має один `role` вартість нерухомості `"editor"`. Чим раніше учасник не зберігався як прихована історія. Відповіді про те, чи з’явилися назви об’єктів.

Форматування робить втрату видимим тільки після того, як це сталося: вихід містить `{"role":"editor"}` в обраному макеті. Не можна відтворити відкидку `viewer` учасник, оскільки послідовність реєстрації отримує об’єкт, не оригінальну послідовність членів. Якщо повторні імена мають значення для рецензування, збереження та перевірки тексту джерела перед форматом натискання, а не повторення на нормалізований результат.

граматика дозволяє їй, spec дискурує її

RFC 8259 ознайомтесь з іменами в об’єкті. Що «добрий» сприяє відновленню результатів без створення унікальності базової граматики об’єкта. Неоднозначне ім'я все ще складається з дійсного рядка, колони та значення в правому співвідношенні. У зв'язку з тим, що граматика може прийняти документ, в той час як політика програми відхиляє її.

Ця відмінність легко пропустити, тому що багато помилок є обов'язковими синтаксисними збами: відсутній колони або причепи коми не можуть формувати JSON об'єкт у всіх. Дублікати різні. Створює питання міжоперабельності після того, як парсер визнає кожен токен. ToolAcre навмисно зупиняється на синтаксису і не додає дублікати-ім'я правила, тому його Дійсний результат не повинен прочитати в якості гарантії унікальності.

Що JSON.parse і ToolAcre увійти

`JSON.parse` використовує пізніший випадок, коли імена об'єктів повторюються. ToolAcre Поведінка, що поведінка, тому що він заходить до форматування. Для `{"limit":10,"limit":25,"unit":"items"}`, валідація, парсований ліміт 25, і форматований вихід містить один `limit`. Необов'язкового сортування ключів може переадресувати, що виживає майно, але не може піддаватися перезапису.

Не в узагальненні, що призводить до кожного парсера або конфігурації. Деякі системи можуть відхилити дублікати, а інші оброблюючі стеки можуть застосовувати різні політики або інспекторні токени перед створенням об'єкта. Заява про безпечну перехресну систему вузька: ненадійні імена ненадійні. Перевірити фактичні режими парсерів, які використовуються на кожному кордоні, коли справа відмінності, а не покладаючи на загальноосвітню вимогу.

При незгоді парсера стає ризиком

Дублікати стають концентрацією безпеки тільки в бетонному багатоступінчастому шляху, де компоненти інтерпретують однаковий текст по-різному. Наприклад, фільтр запиту може перевірити один випадок, коли додаток споживає інше. Якщо це може статися в залежності від точного парсерів, варіантів, переадресації поведінки та використання поля. Супутниковий синтаксис не доведе експлуатованого обходу.

Дефективний контроль – створення однієї політики на межі довіри та тестування реального стека. Відхиляти дублікати імен перед створенням об'єкта втрати при неприпустимості, або забезпечити кожен компонент отримує той самий вже відокремлений вигляд. ToolAcre може продемонструвати свою власну поведінку форматування, але вона не може слухати шлюзи, рамки або послуги, які не входять до інструмента браузера.

Зароблений приклад: документ з повторним ключем

Паста `{"theme":"light","prefs":{"density":"roomy","density":"compact"},"theme":"dark"}`. ToolAcre приймає текст, оскільки кожен учасник є синтактичним. Парсінг залишає кореневу тему як `dark` і в'язану щільність як `compact`. Форматування видає одну копію кожного імені, тому обидва раніше значення зникнуть з вихідного документа.

Цей приклад показує, чому пошук відформатованого результату занадто пізно. Дублікатне виявлення повинно дотримуватися імен користувачів при прочитуванні початкового потоку токени, на кожній глибині об'єкта. Не потрібно дублікати, хоча окремі правила програми можуть подбати про повторне значення елемента. Зберігати джерело незмінним, запустити дублікати-сертифікатором або затишним проти нього, і вирішіть, чи є політика попередження або відхилення.

Визначення дублікатів з метою

Використовуйте інструменти, які явно обіцяє дублікати-ім'я виявлення на джерело JSON. Підходять підходи включають режим парсера, який не працює на повторах, потоковий токен обробник, який відстежує імена для кожного відкритого об'єкта, або Linter з документованим правилом дублікатів. Перевірити непристойні об'єкти і втекти імен: `"name"` і `"name"` декодування назві одного учасника, хоча їхнє джерело відрізняється.

JSON Шума не замінює один раз звичайний парсинг відкидає раніше виникненню. Реактор schema зазвичай отримує побудоване значення і бачить одне майно, а не дублікати історії ken. Запуск унікальності, що перевіряється до або під час парсингу, після чого нанесіть чеки схеми на неоднозначне значення. ToolAcre не дублює виявлення, ані шема перевірки, тому обидва вимагають окремого, цілеспрямованого кроку.

Що це не криється

Повторні імена об'єктів не такі ж, як повторне значення у записів. `[ {"id":7}, {"id":7} ]` містить два окремих об'єкти, кожен з одним `id`; виявлення дубліка ідентифікатора є правилом даних. Таким чином, два масивні елементи з таким же рядком залишаються двома навмисними позиціями, якщо контракт заявка говорить про набір масиву.

Ця стаття не претендує на універсальні перші виграні, останні виграні або відхилити політику для широких мовних екосистем. Записи ToolAcre’ спостережний `JSON.parse` Поведінка і пояснює, чому інший компонент необхідно перевірити безпосередньо. Це також не визначає доцільність використання дублікатів. Вплив безпеки вимагає доказів, які відрізняють інтерпретації перекреслюють відповідну авторизацію, маршрутизації або валідацію.

Відправлення: дійсність JSON не завжди однозначно JSON

Р ToolAcre Дійсний результат означає послідовність токени JSON; не означає, що кожна назва об'єкта унікальний. `JSON.parse` зберігає останнє значення для повторного імені, а форматування послідовно вирішує лише те, що вижили. Оскільки раніше виникнення стирається, відформатований вихід є непристойним доказом для визначення, чи є оригінальне джерело дублікатів.

При виникненні унікальності, ознайомтеся з оригінальним текстом з інструментом для дублікатів до звичайного оформлення або форматування. Застосувати schema і перевірку домену після того, як отримано неоднозначне значення. Для перевірки безпеки слідувати фактичний шлях запиту та параметри парсера замість припустимого незгоди. Практичне правило простий: прийняття синтаксису, дублікати-ім'я політика і значення потоку є окремими перевірками з окремими доказами.