Cosa sono gli “array JSON di primo livello” e perché rappresentano un rischio per la sicurezza?

Nel video in basso, al momento del marker 21:40, il presentatore di Microsoft PDC dice che è importante che tutto il JSON sia incapsulato quindi non è un array di primo livello:

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

Qual è il rischio di un array di livello superiore non confezionato?

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

Questo perché alcuni anni fa Jeremiah Grossman ha trovato una vulnerabilità molto interessante che riguarda Gmail . Alcune persone hanno affrontato questa vulnerabilità utilizzando un cruft non analizzabile (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 loro 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 in 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.

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

Penso che l’attacco (o un modo ansible) sia qualcosa del genere:

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

Il browser (o alcuni browser) usano quel costruttore per la notazione dell’array [n, n, n] . Un attacco CSRF può quindi sfruttare la tua sessione aperta con la tua banca, colpire un URL JSON noto con un tag per recuperarlo, e quindi puoi farlo.