Seri duruma getirme filtreleri
Saldırıları önlemek için hangi sınıfların seri durumdan çıkarılabileceğini kısıtlayın.
Kod Karşılaştırması
✕ 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();
Bu kodda bir sorun mu gördünüz? Bize bildirin.
Modern yöntem neden daha iyi
Güvenlik
Beklenmedik/kötü niyetli sınıfların seri durumdan çıkarılmasını önleyin.
İnce taneli
Derinlik, dizi boyutu, referanslar ve sınıf örüntülerini kontrol edin.
JVM genelinde
JVM'deki tüm seri duruma getirme işlemleri için global filtre belirleyin.
Eski Yaklaşım
Her Şeyi Kabul Et
Modern Yaklaşım
ObjectInputFilter
JDK'dan itibaren
9
Zorluk
İleri
JDK Desteği
Seri duruma getirme filtreleri
Mevcut
JDK 9'dan itibaren geniş çapta kullanılabilir (Eylül 2017)
Nasıl çalışır
ObjectInputFilter, sınıfları izin listesine/reddetme listesine almanıza, nesne grafiği derinliğini, dizi boyutlarını ve referans sayılarını sınırlandırmanıza olanak tanır. Bu, harici kütüphaneler olmadan seri duruma getirme güvenlik açıklarına karşı koruma sağlar.
İlgili Belgeler