La prudenza eccessiva rispetto alla sicurezza di JSON riguarda uno scenario piuttosto remoto. Un caso, per esempio, presuppone che un utente possa 'essere ingannato' a visitare una pagina Web page la quale inizializza uno <script> JSONrequest di terzi che cattura dati sensibili per rimandarli indietro. Questo attacco tenta di ingannare il server nel fargli credere che l'utente stia navigando su quel server e richiedendo dati JSON. Ciò però presuppone che la vittima (server) restituisca JSON come una chiamata ripetuta (callback) o assegnazione. Se invece il server sta trasmettendo un file grezzo di JSON, che deve essere analizzato, questo attacco è inefficace perché uno <script> non può iniziare l'analisi (parse): solo AJAX può analizzare il responseText e AJAX non può essere usato attraverso i domini differenti.
Questo è il motivo per cui questo articolo (e la maggior parte dei professionisti di sicurezza) li suggeriscono di utilizzare per dati sensibili solo JSON con il metodo parseJSON.
E naturalmente, giova nuovamente ricordare che se le vostre pagine Web contengono dei dati sensibili queste non dovrebbero mai di usare tag <script> per caricare i dati di terzi di JSON.
Una descrizione ragionevolmente decente delle vulnerabilità di sicurezza di JSON può essere trovata qui:
Javascript Hijacking.pdf
Una descrizione delle vulnerabilità MOLTO esotiche di sicurezza del AJAX via gli attacchi del prototipo può essere trovata qui:
Subverting Ajax.pdf
Pratiche migliori di JSON
Come conseguenza di suddetto rapporto di sicurezza,
Douglas Crockford (architetto maggiore di Javascript a Yahoo inc) ha scritto un
post in un blog che ha fornito metodi molto semplici ed eleganti per evitare la maggior parte dei problemi di sicurezza di JSON.
Eccoli sintetizzati:
- Non fidatevi mai del Browser
- Mantenere i dati puliti (non includere le funzioni nei vostri dati di JSON)
- Evitare JSON di terzi
- Autenticare tutte le richieste di dati di JSON dal lato server (assicurarsi che si trovano sul vostro server)
- Usare SSL (crittografia del Browser in https) per i dati sensibili