BT

Diffuser les Connaissances et l'Innovation dans le Développement Logiciel d'Entreprise

Contribuez

Sujets

Sélectionner votre région

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

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

Contenu Éducatif

BT