Filtres de désérialisation
Restreignez quelles classes peuvent être désérialisées pour prévenir les attaques.
Comparaison de Code
✕ 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.
Pourquoi la méthode moderne gagne
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é
Support JDK
Filtres de désérialisation
Disponible
Disponible depuis JDK 9 (septembre 2017)
Comment ça fonctionne
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.
Documentation Associée