Filtri di deserializzazione
Limita le classi che possono essere deserializzate per prevenire gli attacchi.
Confronto Codice
✕ Java 8
// Dangerous: accepts any class
ObjectInputStream ois =
new ObjectInputStream(input);
Object obj = ois.readObject();
// deserialization attacks possible!
✓ Java 9+
ObjectInputFilter filter =
ObjectInputFilter.Config
.createFilter(
"com.myapp.*;!*"
);
ois.setObjectInputFilter(filter);
Object obj = ois.readObject();
Vedi un problema con questo codice? Faccelo sapere.
Perché vince l'approccio moderno
Sicurezza
Previene la deserializzazione di classi inaspettate/malevole.
Granulare
Controlla profondità, dimensione array, riferimenti e pattern di classi.
A livello JVM
Imposta un filtro globale per tutta la deserializzazione nella JVM.
Approccio Vecchio
Accetta tutto
Approccio Moderno
ObjectInputFilter
Dal JDK
9
Difficoltà
Avanzato
Supporto JDK
Filtri di deserializzazione
Disponibile
Ampiamente disponibile dal JDK 9 (settembre 2017)
Come funziona
ObjectInputFilter permette di creare allowlist/denylist di classi, limitare la profondità del grafo degli oggetti, le dimensioni degli array e i conteggi dei riferimenti. Difende dalle vulnerabilità di deserializzazione senza librerie esterne.
Documentazione Correlata