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 dimostrativo | Lettura sintattica | Controllo restante |
|---|---|---|
| {"ok":true} | Valido. | Il valore rispetta il contratto? |
| {"ok":true,} | Non valido: virgola finale. | Gestire esplicitamente l’errore. |
| null | Valido. | 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
- Fissa filtri, ordine stabile e identità.
- Prova duplicato e pagina vuota con cursore.
- Conserva identificatori e condizione reale di fine.
Fonte primaria: Google AIP-158 — Pagination. Metodo correlato: consultare la guida pratica.
