I/O Avancé

Restreignez quelles classes peuvent être désérialisées pour prévenir les attaques.

✕ 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();
Un problème avec ce code ? Dites-le nous.
🛡️

Sécurité

Prévient la désérialisation de classes inattendues ou malveillantes.

📐

Contrôle granulaire

Contrôlez la profondeur, la taille des tableaux, les références et les patterns de classes.

🏗️

Au niveau JVM

Établissez un filtre global pour toute la désérialisation dans la JVM.

Ancienne Approche
Tout accepter
Approche Moderne
ObjectInputFilter
Depuis JDK
9
Difficulté
Avancé
Filtres de désérialisation
Disponible

Disponible depuis JDK 9 (septembre 2017)

ObjectInputFilter permet de créer des listes de classes autorisées et refusées, de limiter la profondeur du graphe d'objets, la taille des tableaux et le nombre de références. Cela défend contre les vulnérabilités de désérialisation sans avoir besoin de bibliothèques externes.

Partager 𝕏 🦋 in