I/O Продвинутый

Ограничение допустимых для десериализации классов в целях предотвращения атак.

✕ 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();
Заметили проблему в этом коде? Сообщите нам.
🛡️

Безопасность

Предотвращение десериализации неожиданных или вредоносных классов.

📐

Детальный контроль

Управление глубиной, размерами массивов, ссылками и шаблонами классов.

🏗️

На уровне JVM

Установка глобального фильтра для всех десериализаций в JVM.

Старый подход
Принимать всё
Современный подход
ObjectInputFilter
Начиная с JDK
9
Сложность
Продвинутый
Фильтры десериализации
Доступно

Доступно в JDK 9 (сент. 2017)

ObjectInputFilter позволяет вести списки разрешённых и запрещённых классов, а также ограничивать глубину графа объектов, размеры массивов и счётчики ссылок. Это защищает от уязвимостей десериализации без внешних библиотек.