Qu'est-ce que le format de fichier SER ?
Un fichier .ser contient un flux d'objets Java sérialisés - un encodage binaire d'un ou plusieurs objets Java produit par ObjectOutputStream et relu par ObjectInputStream. Le format a été introduit avec Java 1.1 en 1997 et est défini dans la Java Object Serialization Specification.
Chaque fichier .ser valide commence par la séquence magique de 4 octets AC ED 00 05 : les octets 0-1 contiennent STREAM_MAGIC (0xACED) et les octets 2-3 contiennent STREAM_VERSION (0x0005). Le flux encode le descripteur de classe de chaque objet, les champs et les données imbriquées à l'aide de marqueurs de bloc typés : TC_OBJECT (0x73), TC_CLASS (0x76), TC_ARRAY (0x75), TC_STRING (0x74) et TC_NULL (0x70).
La sérialisation était largement utilisée pour la mise en cache de l'état des applications, le passage d'objets entre JVM et la persistance des données de configuration. Cependant, la désérialisation Java est une vulnérabilité de sécurité connue - des flux malveillants peuvent exploiter des chaînes de gadgets (« gadget chains ») dans le classpath pour parvenir à une exécution de code à distance. Java 9 a introduit ObjectInputFilter pour restreindre les classes pouvant être désérialisées, et les directives Java modernes déconseillent fortement l'utilisation de fichiers .ser pour les données non fiables.
Les alternatives modernes préférées incluent JSON (via Jackson ou Gson), Protocol Buffers ou Kryo. GeneMapper (Thermo Fisher Scientific) utilise des fichiers .ser pour les données de projets de bio-informatique. L'utilitaire SerializationDumper permet d'inspecter le contenu des fichiers .ser sans les exécuter.
Sécurité et sûreté
RISQUE : HIGHLa désérialisation Java est l'une des surfaces d'attaque les plus critiques dans les applications Java (historiquement dans le Top 10 de l'OWASP). L'ouverture d'un fichier .ser non fiable dans une application vulnérable peut exécuter du code arbitraire via des chaînes de gadgets (cf. l'exploit Apache Commons Collections de 2015). Les utilisateurs finaux ne devraient ouvrir que des fichiers .ser provenant de sources sûres et dans leur application prévue. Pour analyser des fichiers .ser inconnus : utilisez SerializationDumper (vidage statique, n'exécute pas la charge utile) plutôt que de les désérialiser dans une JVM active.
Détails du format
en bref- Fichier de projet GeneMapper - Le logiciel GeneMapper d'Applied Biosystems/Life Technologies utilise .ser comme conteneur propriétaire de données de projet.
- Cache de données d'application générique - Toute application Java peut sérialiser des objets arbitraires en .ser ; le contenu est entièrement spécifique à l'application.
Programmes qui ouvrent les fichiers SER
Détails techniques
spécifications approfondies| Octets magiques | AC ED 00 05 à l'offset 0 - STREAM_MAGIC (0xACED) suivi de STREAM_VERSION (0x0005) |
| Encodage | Binaire, big-endian |
| Type MIME | application/x-java-serialized-object |
| API de sérialisation | java.io.ObjectOutputStream (écriture) / java.io.ObjectInputStream (lecture) ; les classes doivent implémenter java.io.Serializable |
| Version du protocole | Protocole de sérialisation version 2 (version de flux 5), stable depuis Java 1.2 |
| Versionnage de classe | Chaque classe intègre un serialVersionUID ; une discordance de version lève une InvalidClassException lors de la désérialisation |
| Marqueurs de contenu | TC_OBJECT (0x73), TC_CLASS (0x76), TC_ARRAY (0x75), TC_STRING (0x74), TC_NULL (0x70) |
| Risque de sécurité | Vecteur d'attaque connu par chaîne de gadgets de désérialisation ; Java 9+ atténue le risque via la liste d'autorisation de classes ObjectInputFilter |
| Taille typique | De quelques octets pour des objets simples jusqu'à des centaines de Mo pour des graphes d'objets sérialisés volumineux |
| Portabilité de la plateforme | Lisible par n'importe quelle JVM sur Windows, Linux ou macOS ; non portable en dehors de l'écosystème Java |
| Compression du flux | Non compressé au niveau du format ; l'encapsulation GZIPOutputStream est appliquée optionnellement au niveau de la couche applicative |
| Intégrité | Pas de somme de contrôle intégrée ; l'intégrité est assurée par la signature au niveau applicatif ou par un transport sécurisé |
| Application connue | GeneMapper (Thermo Fisher Scientific) utilise .ser pour les fichiers de données et de projets bio-informatiques |
| Publié | 1997 (Java 1.1, JDK 1.1) |
| Dernière version | Stream version 5 (serialization protocol version 2, since Java 1.2) |
| Standard ouvert | Oui · libre de droits |
| Spécification | docs.oracle.com |
Conversions SER
Q&R de la communauté
posées par les utilisateursPas encore de questions - soyez le premier à poser une question sur les fichiers SER.