Leggere JSON: separare sintassi, contratto e fiducia

In sintesi

Un parser trasforma testo JSON in valori. Non dimostra validità applicativa, affidabilità del mittente o diritto di usare i dati.

Mappa globale delle reti in una sala briefing vuota Illustrazione · scena fittizia
In questo articolo

Input validi con significati diversi

Un documento JSON può essere oggetto, array o valore semplice. null è valido anche se il contratto richiede un oggetto. Alcuni numeri superano la precisione intera di JavaScript; nomi ripetuti non sono interpretati allo stesso modo da tutti i parser.

Input dimostrativoLettura sintatticaControllo restante
{"ok":true}Valido.Il valore rispetta il contratto?
{"ok":true,}Non valido: virgola finale.Gestire esplicitamente l’errore.
nullValido.Il contratto ammette null?
{"id":9007199254740993}Numero valido, rischio di precisione in JavaScript.Prevedere una stringa per questo identificatore.
{"a":1,"a":2}Nomi ripetuti: interpretazione non portabile.Definire e applicare una regola di rifiuto.

Controllare ogni fase di ricezione

  • Usate un parser mantenuto, mai eval. Verificate stato HTTP, tipo di contenuto, limiti di dimensione e gestione esplicita di corpi assenti o malformati.
  • Validate poi il contratto: tipo radice, campi obbligatori, valori ammessi e differenza fra assenza, null e zero. Conservate identificatori lunghi come stringhe se il contratto lo prevede.
  • Fissate limiti di profondità e risorse, politica sui nomi ripetuti e gestione degli errori. Non inserite stringhe ricevute in HTML o query senza protezione adeguata.

Mantenere errori utili senza esporre dati

Testate risposte parziali, cambi di versione e Unicode. Registrate contesto minimo invece di segreti o corpi completi. Un errore di decodifica non deve diventare un risultato vuoto presentato come successo né interrompere silenziosamente l’intera catena.

Fonti primarie

Registrare gli errori dell'API JSON senza divulgare i dati sensibili.

Il corpo di un JSON può contenere identificatori, segreti o dati personali. La diagnosi spesso richiede il tipo di evento, il percorso, l'esito, l'identificatore di correlazione e un dettaglio non sensibile dell'errore, anziché l'intero payload.

  • Classificare i campi e mascherare quelli non necessari per la diagnosi.
  • Testare gli errori di parsing e di schema con valori sintetici.
  • Verificare che i log degli errori e le esportazioni non copino payload completi.

Fonte primaria: ACSC and partners — Event logging and threat detection. Metodo correlato: consultare la guida pratica.

Chiavi JSON e cache personalizzate.

Punto di revisione aggiuntivo: chiavi JSON e cache personalizzate. Una policy a livello di rappresentazione e test per individuare fughe di dati tra account e contenuti obsoleti dopo le modifiche.

  • Scegliere la modalità di conservazione: RFC 9111 distingue le direttive: no-cache richiede la convalida prima del riutilizzo, no-store vieta l'archiviazione HTTP pertinente e unqualified private esclude l'archiviazione condivisa. Nessuna di queste, da sola, garantisce la riservatezza del sistema.
  • Ispezionare le chiavi: Verificare il metodo, l'URI e le dimensioni che modificano una rappresentazione. Vary riguarda i campi della richiesta; non si tratta di autorizzazione. Ricercare la lingua omessa, la negoziazione del formato e il contesto dell'account nei livelli applicativi.

Fonte primaria: IETF — RFC 9111, HTTP Caching. Metodo correlato: consultare la guida pratica.

Separare parsing e fine della lettura

JSON sintatticamente valido può descrivere una pagina incompleta, un errore operativo o una continuazione. Il parser non decide da solo che l’export sia concluso.

  • Validare struttura dei dati e metadati di continuazione.
  • Trattare token assenti secondo il contratto.
  • Rilevare token ripetuti e pagine senza progresso.

Caso di accettazione riproducibile

Esempio fittizio: questi dati non descrivono clienti o risultati osservati.

Vedi dati del caso
{
    "page_1_ids": [
        "A",
        "B"
    ],
    "page_2_ids": [
        "B",
        "C"
    ],
    "next_cursor": "c2",
    "empty_page_has_next_cursor": true
}

Decisione attesa

B si ripete. Controlla identità e continua col cursore anche dopo una pagina vuota.

Procedura di verifica

  1. Fissa filtri, ordine stabile e identità.
  2. Prova duplicato e pagina vuota con cursore.
  3. Conserva identificatori e condizione reale di fine.

Google AIP-158 — Pagination

Fonte primaria: Google AIP-158 — Pagination. Metodo correlato: consultare la guida pratica.