2015-03-02 15 views
5

Il sito angolare raccomanda prefisso tuoi JSONs con )]}'\n, per proteggere da loro chiamati come JSONP:Come funziona la protezione dalle vulnerabilità di AngularJS JSON?

Un JSON vulnerabilità consente sito web di terze parti per trasformare il tuo URL risorsa JSON in richiesta JSONP in alcune condizioni. Per contrastare questo, il tuo server può prefixare tutte le richieste JSON con la seguente stringa ")]}", \ n ". Angular cancellerà automaticamente il prefisso prima di elaborarlo come JSON.

Ma l'articolo di riferimento non ha alcuna menzione di queste parentesi di chiusura, e ci si sente come sarebbe abbastanza facile da aggirare (Perché il mio plug JSONView Chrome è stato patched a nudo fuori. Perché non sarebbe questo lavoro per un "attaccante"?).

Invece l'articolo suggerisce che avvolge il JSON come oggetto:

{"d": ["Philha", "my-confession-to-crimes", 7423.42]} 

che in qualche modo ti protegge.

Perché AngularJS preferisce questa (dispari) protezione e funziona? Non sono sicuro di come testarlo.

risposta

4

Perché questo non dovrebbe funzionare per un "attaccante"?

Al fine di depurare i caratteri, è necessario avere accesso alla grezzo contenuto del file.

Le estensioni di Chrome hanno accesso a questo. Qualcuno che ha indicato un <script> nel file raw no.

Perché AngularJS favore questa protezione (dispari),

perché funziona;)

e funziona?

Sì. Quando il file viene trattato come JavaScript, genererà un errore sulla linea 1 prima che raggiunga la matrice. Ciò impedirà mai di provare a valutare l'array, quindi il costruttore di Array sovrascritto non sarà in grado di leggere i dati da esso.


Fortunatamente, i problemi di sicurezza sembra esistere solo nelle versioni molto antiche di Firefox, quindi probabilmente non c'è bisogno di preoccuparsi di questo a tutti.

+0

Cool! Perché è allora che non seguono il consiglio nel blog? Grazie ancora. – Pureferret

+1

Probabilmente per le ragioni descritte nell'ultimo paragrafo della risposta, ma dovrai chiedere loro di saperlo con certezza. – Quentin