Domanda

Sto pianificando di utilizzare il metodo fromJson () di gson per analizzare una stringa proveniente dal browser.Ci sono potenziali vulnerabilità associate a questa operazione?Il tipo di dati in cui sto convertendo è relativamente semplice, un elenco e un booleano.Ma dal momento che Gson usa la riflessione, c'è qualcosa a cui prestare attenzione?

Ad esempio, con la vecchia jvm (precedente alla 6.24), si sarebbe potuto usare un attacco DOS contro gli interi, dove il parser degli interi si sarebbe bloccato.

Può qualche json intelligente far sì che gson inizi a caricare le classi, come dovrebbe essere?

È stato utile?

Soluzione

La cosa da tenere d'occhio con Gson è il tipo di builder che stai utilizzando (vedi deserializzatore / serializzatore personalizzato)

Gson ha un altro punto debole, quando si deserializza (diciamo usandone uno personalizzato) è meglio controllare il tipo di oggetto che si sta passando (utilizzare instanceof).

Altro punto principale: Gson convertirà automaticamente la variabile in base al tipo passato.

es.{"var1": 1, "var2": "1"} Il primo verrà convertito in un numero intero, il secondo in una stringa, quindi farei attenzione alla trasformazione degli oggetti.

Altri suggerimenti

Per motivi di sicurezza, uno sviluppatore di un progetto Gson ha consigliato di non consentire al codice di deserializzazione di caricare definizioni di classi specificate dall'utente: la deserializzazione di elementi di tipo generico dovrebbe essere controllata con attenzione.

Non è così difficile scrivere un parser JSON e qualsiasi versione open source ben utilizzata dovrebbe essere sicura quanto si potrebbe sperare.Ovviamente, il parser potrebbe contenere un bug che lo rende soggetto a sovraccarico del buffer e simili, ma, ancora una volta, la logica è abbastanza semplice che ciò non dovrebbe accadere se il codice è ragionevolmente ben scritto e ben recensito.

Un pericolo maggiore è che tu stesso potresti non ispezionare correttamente i risultati dell'analisi e accettare, ad esempio, un numero che non rientra nell'intervallo per la tua applicazione o una stringa troppo lunga.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top