Qualcosa non va con la valutazione diretta di JSON se il tuo codice lo ha creato?

3

Supponiamo di avere una variabile lato server contenente JSON (denominata strJSON ) creata dal mio codice. In JavaScript posso consumarlo in questo modo:

var data = <%= strJSON %>;

o utilizzare una libreria di analisi JSON:

var data = JSON.parse('<%= HttpUtility.JavaScriptStringEncode(strJSON) %>');

Preferisco il 2 °, per sicurezza. È quello che sto facendo inutile?

    
posta JoelFan 26.02.2015 - 22:14
fonte

3 risposte

10

Suppose I have a server-side variable containing JSON, called strJSON that my own code created.

È stato creato interamente dal tuo codice? Sei sicuro che in nessun punto aggiunga un input dell'utente? Sei anche sicuro che in nessun punto del futuro sarà mai modificato per aggiungere dati provenienti dall'input dell'utente? Se puoi essere sicuro al 100% di questo, allora probabilmente sei al sicuro. Ma dal momento che è difficile essere certi, probabilmente è meglio usare solo le funzioni di analisi JSON incorporate.

    
risposta data 26.02.2015 - 22:18
fonte
3

Se la stringa JSON è codificata interamente sotto il tuo controllo, è sfruttabile nella misura in cui il tuo metodo di codifica è rotto. Detto questo, dovresti essere sicuro se stai eseguendo una serializzazione semplice utilizzando un serializzatore affidabile , ad esempio:

var js = new JavaScriptSerializer();
var thingy123 = ThingyRepo.Get(123);
var json = js.Serialize(thingy123);

Response.Write(json); // or whatever

Dovresti essere sicuro, anche se thingy123 contiene dati inviati dall'utente. Un serializzatore JSON ben consolidato incapsulerà in modo sicuro tutto in un formato JSON "non eseguibile".

Ma , se stai stampando la tua serializzazione, ti consigliamo di essere più rigoroso nella convalida.

    
risposta data 26.02.2015 - 22:31
fonte
1

No, non c'è niente di sbagliato nel valutare il tuo codice, se sai per certo che è sicuro. Troppi vengono coinvolti nel seguire ciecamente le regole. La valutazione del codice in una stringa sembra davvero far emergere opinioni forti per qualche ragione.

La valutazione del codice in una stringa è uno strumento. Scopri cosa fa, come funziona e perché può essere pericoloso. Quando veramente capisci perché generalmente non dovresti usare la valutazione, allora diventi libero di usarlo quando è lo strumento giusto per il lavoro.

Se pensi è probabilmente sicuro, non farlo. Quando conosci è sicuro, non c'è motivo per non farlo.

    
risposta data 27.02.2015 - 04:30
fonte

Leggi altre domande sui tag