BT

Accueil InfoQ Actualités Les Filtres de Désérialisation d'Objet portés depuis Java 9

Les Filtres de Désérialisation d'Objet portés depuis Java 9

Favoris

La JEP 290, qui permet de filtrer les données entrantes lors de la désérialisation d'un objet et initialement destinée à Java 9, a été portée vers Java 6, 7 et 8. La fonctionnalité fournit un mécanisme pour filtrer les données entrantes dans un flux d'entrée d'objet pendant qu'il est en cours de traitement et peut aider à prévenir les vulnérabilités de désérialisation comme celle qui a affecté Apache Commons et d'autres bibliothèques il y a un certain temps.

La désérialisation des données non fiables est un risque communément identifié par le Open Web Application Security Project (OWASP) et la CERT Standards de Code pour Java (en particulier les règles SER12-J et SER13-J), entre autres. Les développeurs logiciel sont toujours censés vérifier que les données entrantes dans un ObjectInputStream sont valides ; toutefois les outils existants du JDK n'ont pas toujours rendu la tâche aisée. La JEP 290 change cela en fournissant un moyen de filtrer les données sans avoir à étendre ObjectInputStream. Cela se fait à travers plusieurs mécanismes, selon la manière dont les développeurs sont impliqués.

Au niveau de base, les développeurs peuvent configurer l'ObjectInputFilter par défaut en éditant la propriété système jdk.serialFilter ou la propriété de sécurité jdk.serialFilter dans conf/security/java.properties. Ces propriétés acceptent une ou plusieurs expressions qui peuvent être utilisées pour identifier les classes (en utilisant une syntaxe similaire aux expressions de fichiers d'Ant) ou pour définir des limites dans les propriétés des objets désérialisés :

// reject deserialisation of any class belonging to untrustedmodule,
// and of any array with more than 500 items in it
jdk.serialFilter=!untrustedmodule/.**;maxarray=500 

// white-list classes from package com.myorg.trusted,
// but not necessarily from its subpackages.
jdk.serialFilter=com.myorg.trusted.* 

Si plus de flexibilité est nécessaire, les développeurs peuvent spécifier leurs propres actions et leurs propres vérifications en implémentant leur propre ObjectInputFilter, puis en l'appliquant à un ObjectInputStream à l'aide de setObjectInputFilter. Un ObjectInputFilter peut utiliser les informations disponibles sur ObjectInputFilter.FilterInfo pour décider si l'objet actuellement désérialisé peut être accepté, doit être rejeté ou si le filtre n'a pas suffisamment d'informations pour prendre une décision. Dans ce dernier cas, le filtre personnalisé peut laisser l'état comme indécis et déléguer la décision à un autre filtre défini par l'utilisateur ou le filtre système par défaut.

Enfin, si les développeurs souhaitent utiliser leur propre mécanisme pour toutes les désérialisations, un filtre spécifique peut être affecté comme défaut système avec ObjectInputFilter.Config.setSerialFilter.

Comme indiqué précédemment, les développeurs n'auront pas besoin d'attendre Java 9 pour commencer à appliquer les filtres de sérialisation ; la JEP 290 est disponible dans Java 8 update 121, Java 7 update 131 et Java 6 update 141.

Evaluer cet article

Pertinence
Style

Bonjour étranger!

Vous devez créer un compte InfoQ ou cliquez sur pour déposer des commentaires. Mais il y a bien d'autres avantages à s'enregistrer.

Tirez le meilleur d'InfoQ

Html autorisé: a,b,br,blockquote,i,li,pre,u,ul,p

Commentaires de la Communauté

Html autorisé: a,b,br,blockquote,i,li,pre,u,ul,p

Html autorisé: a,b,br,blockquote,i,li,pre,u,ul,p

BT

Votre profil est-il à jour? Merci de prendre un instant pour vérifier.

Note: en cas de modification de votre adresse email, une validation sera envoyée.

Nom de votre entreprise:
Rôle dans votre entreprise:
Taille de votre entreprise:
Pays/Zone:
État/Province/Région:
Vous allez recevoir un email pour confirmer la nouvelle adresse email. Ce pop-up va se fermer de lui-même dans quelques instants.