JSON lezen: syntaxis, contract en vertrouwen scheiden

In het kort

Een parser zet JSON-tekst om in waarden. Dit bewijst geen zakelijke geldigheid, betrouwbaarheid van de afzender of gebruiksrecht.

Wereldwijde netwerkkaart in een lege briefingruimte Illustratie · fictieve scène
In dit artikel

Geldige invoer kan iets anders betekenen

JSON kan een object, array of eenvoudige waarde zijn. null is dus geldig, ook als het contract een object vereist. Sommige getallen overschrijden JavaScripts gehele precisie; dubbele eigenschapsnamen worden niet door alle parsers hetzelfde geïnterpreteerd.

VoorbeeldinvoerSyntactische lezingResterende controle
{"ok":true}Geldig.Voldoet de waarde aan het contract?
{"ok":true,}Ongeldig: afsluitende komma.Handel de fout expliciet af.
nullGeldig.Staat het contract null toe?
{"id":9007199254740993}Geldig getal, precisierisico in JavaScript.Gebruik tekst voor deze identificator.
{"a":1,"a":2}Dubbele namen: niet-portabele interpretatie.Definieer en handhaaf een afwijzingsregel.

Controleer elke ontvangststap

  • Gebruik een onderhouden JSON-parser, nooit eval. Controleer HTTP-status, verwacht inhoudstype, omvangslimieten en expliciete afhandeling van ontbrekende of ongeldige inhoud.
  • Valideer daarna het contract: worteltype, verplichte velden, toegestane waarden en verschillen tussen ontbrekend, null en nul. Behoud lange identificatoren als tekst als het contract dat bepaalt.
  • Stel diepte- en middelenlimieten, dubbelnamenbeleid en foutafhandeling in. Voeg ontvangen tekst niet zonder geschikte bescherming in HTML of queries in.

Houd fouten bruikbaar zonder gegevens bloot te stellen

Test gedeeltelijke antwoorden, versiewijzigingen en Unicode. Log minimale context in plaats van geheimen of volledige inhoud. Een decodeerfout mag geen leeg succesresultaat worden of stilzwijgend de hele verwerking stoppen.

Primaire bronnen

Registreer JSON API-fouten zonder payloads te lekken.

Een JSON-body kan identificatoren, geheimen of persoonsgegevens bevatten. Diagnostiek vereist vaak het gebeurtenistype, de route, de uitkomst, de correlatie-identificator en een niet-gevoelig foutdetail in plaats van de volledige payload.

  • Classificeer velden en maskeer velden die niet nodig zijn voor de diagnose.
  • Test parseer- en schemafouten met synthetische waarden.
  • Controleer of foutenlogboeken en exports geen volledige payloads kopiëren.

Primaire bron: ACSC and partners — Event logging and threat detection. Verwante methode: lees de praktische gids.

Gepersonaliseerde JSON en cache-sleutels

Aanvullend controlepunt: gepersonaliseerde JSON en cache-sleutels. Een beleid op representatieniveau en tests die lekken tussen accounts en verouderde inhoud na wijzigingen opsporen.

  • Kies retentie: RFC 9111 onderscheidt richtlijnen: no-cache vereist validatie vóór hergebruik, no-store verbiedt de relevante HTTP-opslag en unqualified private sluit gedeelde opslag uit. Geen enkele garandeert op zichzelf de vertrouwelijkheid van het systeem.
  • Inspecteer sleutels: Controleer de methode, URI en dimensies die een representatie wijzigen. Vary betreft aanvraagvelden; het is geen autorisatie. Zoek naar weggelaten taal, formaatonderhandeling en accountcontext in applicatielagen.

Primaire bron: IETF — RFC 9111, HTTP Caching. Verwante methode: lees de praktische gids.

API-paginering en consistente exports

Wijzigende data kunnen ontbrekende of dubbele records veroorzaken.

  • Noteer filters, sortering en sleutel voor gelijke waarden. Bepaal of de API een snapshot of een veranderende collectie biedt. Test aanmaak en verwijdering tijdens het lezen; een cursor garandeert geen bevroren gegevens.
  • Bij AIP-158 beëindigt een lege next_page_token het lezen, niet een korte of lege resultaatpagina. Fictieve pagina’s [A,B] en [B,C] bevatten vier rijen maar drie unieke identifiers. Detecteer ook dezelfde cursor zonder voortgang en volg het contract van de gebruikte API.
  • Sla de batch duurzaam op vóór bevestiging van de voortgang. Herhaal een onderbroken batch met stabiele identifiers en controleer rechten per verzoek; een cursor is geen toegangsbewijs. Herstart of reconcileer expliciet als een snapshot verloopt; voeg verschillende toestanden niet stilzwijgend samen.

Herhaalbare acceptatiecasus

Fictief voorbeeld: deze gegevens beschrijven geen klant of waargenomen resultaat.

Casusgegevens bekijken
{
    "page_1_ids": [
        "A",
        "B"
    ],
    "page_2_ids": [
        "B",
        "C"
    ],
    "next_cursor": "c2",
    "empty_page_has_next_cursor": true
}

Verwachte beslissing

B komt opnieuw voor. Controleer identiteiten en volg de cursor ook na een lege pagina.

Verificatieprocedure

  1. Bepaal filters, stabiele volgorde en objectidentiteit.
  2. Test duplicaat en lege pagina met cursor.
  3. Bewaar identificaties en echte eindvoorwaarde.

Google AIP-158 — Pagination

Bewijst het verwachte aantal rijen dat de export compleet is?

Nee. Een ontbrekende en dubbele identifier kunnen elkaar in het aantal opheffen. Vergelijk identifiers, bereik en peiltijd en vermeld onopgeloste verschillen.

Primaire bron: Google AIP-158 — Pagination. Verwante methode: lees de praktische gids.