I/O Avanzato

Limita le classi che possono essere deserializzate per prevenire gli attacchi.

✕ 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.
🛡️

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
Filtri di deserializzazione
Disponibile

Ampiamente disponibile dal JDK 9 (settembre 2017)

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.

Condividi 𝕏 🦋 in