2010-08-17 10 views
59

Nel video qui sotto, al marcatore tempo 21:40, il presentatore Microsoft PDC dice che è importante che tutti JSON essere avvolto quindi non è un array di livello superiore:Che cosa sono gli "array JSON di livello superiore" e perché rappresentano un rischio per la sicurezza?

https://channel9.msdn.com/Events/PDC/PDC09/FT12

Qual è il rischio di uno scartare array di primo livello?

Come posso controllare e vedere se sono vulnerabile? Acquisto molti componenti da terze parti e ho fornitori esterni che sviluppano il mio codice.

risposta

38

Questo perché alcuni anni fa Jeremiah Grossman ha trovato un numero molto interesting vulnerability that affects gmail. Alcune persone hanno affrontato questa vulnerabilità utilizzando un unparseable cruft (la descrizione tecnica del signor bobince in questa pagina è fantastica.)

Il motivo per cui Microsoft sta parlando di questo è perché non hanno ancora aggiornato il proprio browser (ancora). (Modifica: Le versioni recenti di Edge e IE 10/11 hanno affrontato questo problema.) Mozilla considera questa vulnerabilità nelle specifiche di json e quindi l'ha patchata su Firefox 3. Per la cronaca sono completamente d'accordo con Mozilla, e la sua sfortuna, ma ogni sviluppatore di applicazioni web dovrà difendersi da questa vulnerabilità molto oscura.

+4

L'invio di informazioni sensibili in un array JSON continua un rischio per la sicurezza nel 2017? – jrahhali

+0

@jrahhali quella domanda è degna del suo stesso post, forse security.stackexchange.com sarebbe un buon posto per questo. – rook

+0

Sembra che qualcuno abbia fatto: https://security.stackexchange.com/q/155518 –

10

Penso che sia perché il costruttore Array() può essere ridefinito. Tuttavia, questo problema non è davvero unico per gli array.

penso che l'attacco (o uno dei modi) è qualcosa di simile:

function Array(n) { 
    var self = this; 
    setTimeout(function() { 
    sendToEvilHackers(self); 
    }, 10); 
    return this; 
} 

Il browser (o alcuni browser) uso che di costruzione per [n, n, n] matrice notazione. Un attacco CSRF può quindi sfruttare la tua sessione aperta con la tua banca, colpire un noto JSON URL con un tag <script> per recuperarlo, e quindi poof di tua proprietà.

+3

Non capisco: spostare la matrice nel JSON in una proprietà non fermerebbe questo tipo di attacco. Restituendo '{" d ": [1,2,3]}' sarebbe altrettanto suscettibile di restituire '[1,2,3]'. –

+0

Sono d'accordo - questo è quello che intendevo quando ho detto che il problema non riguarda solo gli array. – Pointy

+35

Non vero. Un '{all'inizio di una riga in JavaScript viene interpretato come un blocco di codice, non un oggetto letterale. Quindi, il tuo '{" d ": [1,2,3]}' non è uno script valido e non verrebbe eseguito dal browser. Provalo :) – fletom

Problemi correlati