I/O Experte

Einschränken, welche Klassen deserialisiert werden dürfen, um Angriffe zu verhindern.

✕ 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();
Problem mit diesem Code entdeckt? Sag uns Bescheid.
🛡️

Sicherheit

Deserialisierung unerwarteter oder bösartiger Klassen verhindern.

📐

Feingranular

Tiefe, Array-Größe, Referenzen und Klassenmustern kontrollieren.

🏗️

JVM-weit

Einen globalen Filter für alle Deserialisierungen in der JVM setzen.

Alter Ansatz
Alles akzeptieren
Moderner Ansatz
ObjectInputFilter
Seit JDK
9
Schwierigkeitsgrad
Experte
Deserialisierungsfilter
Verfügbar

Seit JDK 9 allgemein verfügbar (Sept. 2017)

ObjectInputFilter ermöglicht es, Klassen auf einer Zulassungs- oder Sperrliste einzutragen sowie die Tiefe des Objektgraphen, Array-Größen und Referenzzähler zu begrenzen. Dadurch werden Deserialisierungsschwachstellen ohne externe Bibliotheken abgewehrt.

Teilen 𝕏 🦋 in