Filtry deserializacji
Ograniczaj klasy, które można deserializować, aby zapobiegać atakom.
Porównanie kodu
✕ 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();
Widzisz problem z tym kodem? Daj nam znać.
Dlaczego nowoczesne podejście wygrywa
Bezpieczeństwo
Blokuje deserializację nieoczekiwanych lub złośliwych klas.
Precyzyjna kontrola
Kontrolujesz głębokość, rozmiary tablic, referencje i wzorce klas.
Ochrona całego JVM
Możesz ustawić globalny filtr dla całej deserializacji w JVM.
Stare podejście
Akceptuj wszystko
Nowoczesne podejście
ObjectInputFilter
Od JDK
9
Poziom trudności
Zaawansowany
Wsparcie JDK
Filtry deserializacji
Dostępne
Szeroko dostępne od JDK 9 (wrzesień 2017)
Jak to działa
ObjectInputFilter pozwala tworzyć allowlisty i denylisty klas, ograniczać głębokość grafu obiektów, rozmiary tablic i liczbę referencji. Chroni to przed podatnościami deserializacji bez dodatkowych bibliotek.
Powiązana dokumentacja