
Dato un contenuto simile a JSON, The JSON Sanitizer lo converte in JSON valido.
Dato un contenuto simile a JSON, JSON Sanitizer lo converte in JSON valido.
Può essere collegato a entrambe le estremità di una pipeline di dati per aiutare a soddisfare il principio di Postel:
sii conservatore in ciò che fai, sii liberale in ciò che accetti dagli altri
Applicato a contenuti simili a JSON provenienti da altri, produrrà JSON ben formato che dovrebbe soddisfare qualsiasi parser tu usi.
Applicato al tuo output prima di inviarlo, correggerà piccoli errori di codifica e renderà più semplice incorporare il tuo JSON in HTML e XML.

Molte applicazioni hanno grandi quantità di codice che utilizza metodi ad hoc per generare output JSON.
Spesso questi output passano tutti attraverso una piccola quantità di codice
del framework prima di essere inviati sulla rete. Questa piccola quantità di
codice del framework può usare questa libreria per assicurarsi che gli output
ad hoc siano conformi agli standard e sicuri da passare a deserializzatori
(estremamente) potenti come l'operatore eval di Javascript.
Le applicazioni hanno anche spesso API di servizi web che ricevono JSON da una varietà di fonti. Quando questo JSON viene creato usando metodi ad hoc, questa libreria può rimodellarlo in una forma facile da analizzare.
Collegando questa libreria al codice che invia e riceve richieste e risposte, questa libreria può aiutare gli architetti software a garantire sicurezza e buona formazione a livello di sistema.
Il sanitizer accetta contenuti simili a JSON e li interpreta come farebbe eval in JS.
Nello specifico, gestisce questi costrutti non standard.
Il sanitizer corregge punteggiatura mancante, virgolette finali e parentesi
chiuse mancanti o non corrispondenti. Se un input contiene solo spazi bianchi,
viene sostituita la stringa JSON valida null.
L'output è JSON ben formato come definito da RFC 4627. L'output soddisfa queste proprietà aggiuntive:
"<script", "</script" o "<!--" e può quindi essere incorporato in un elemento script HTML senza ulteriore codifica."]]>" e può quindi essere incorporato in una sezione CDATA XML senza ulteriore codifica.eval di Javascript (dopo essere stato racchiuso tra parentesi) o da JSON.parse. In particolare, l'output non conterrà alcun letterale di stringa con nuove righe JS incorporate (U+2028 Paragraph separator o U+2029 Line separator).Poiché l'output è JSON ben formato, passarlo a eval non
avrà effetti collaterali né variabili libere, quindi non è né un vettore di
code-injection, né un vettore per l'esfiltrazione di segreti.
Questa libreria garantisce solo che la fase stringa JSON → oggetto Javascript
non abbia effetti collaterali e non risolva variabili libere, e non può
controllare come altro codice lato client interpreti successivamente l'oggetto
Javascript risultante. Quindi se il codice lato client prende una parte dei dati
analizzati che è controllata da un attaccante e la passa attraverso un
interprete potente come eval o innerHTML, quel codice lato client
potrebbe subire effetti collaterali indesiderati.
var myValue = eval(sanitizedJsonString); // safe
var myEmbeddedValue = eval(myValue.foo); // possibly unsafe
Inoltre, sanificare JSON non può proteggere un'applicazione dagli attacchi Confused Deputy
var myValue = JSON.parse(sanitizedJsonString);
addToAdminstratorsGroup(myValue.propertyFromUntrustedSource);
Il metodo sanitize restituirà la stringa di input senza allocare un nuovo buffer quando l'input è già JSON valido che soddisfa le proprietà sopra indicate. Pertanto, se utilizzato su input di solito ben formati, ha un overhead di memoria minimo.
Il metodo sanitize richiede tempo O(n) dove n è la lunghezza dell'input in unità di codice UTF-16.
| Costrutto | Politica |
|---|
'...' | Le stringhe con apici singoli vengono convertite in stringhe JSON. |
\xAB | Le sequenze di escape esadecimali vengono convertite in escape Unicode JSON. |
\012 | Le sequenze di escape ottali vengono convertite in escape Unicode JSON. |
0xAB | I letterali interi esadecimali vengono convertiti in numeri decimali JSON. |
012 | I letterali interi ottali vengono convertiti in numeri decimali JSON. |
+.5 | I numeri decimali vengono forzati al formato più rigoroso di JSON. |
[0,,2] | Le elisioni negli array vengono riempite con null. |
[1,2,3,] | Le virgole finali vengono rimosse. |
{foo:"bar"} | I nomi di proprietà senza virgolette vengono citati. |
//comments | I commenti in linea e a blocco in stile JS vengono rimossi. |
(...) | Le parentesi di raggruppamento vengono rimosse. |