Deserialisierungsfilter
Einschränken, welche Klassen deserialisiert werden dürfen, um Angriffe zu verhindern.
Code-Vergleich
✕ 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.
Warum der moderne Weg gewinnt
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
JDK-Unterstützung
Deserialisierungsfilter
Verfügbar
Seit JDK 9 allgemein verfügbar (Sept. 2017)
Wie es funktioniert
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.
Zugehörige Dokumentation