Che cos'è il formato di file SER?
Un file .ser contiene uno stream di oggetti Java serializzati - una codifica binaria di uno o più oggetti Java prodotti da ObjectOutputStream e riletti da ObjectInputStream. Il formato è stato introdotto con Java 1.1 nel 1997 ed è definito nella Java Object Serialization Specification.
Ogni file .ser valido inizia con la sequenza magica di 4 byte AC ED 00 05: i byte 0-1 contengono STREAM_MAGIC (0xACED) e i byte 2-3 contengono STREAM_VERSION (0x0005). Lo stream codifica il descrittore di classe di ogni oggetto, i campi e i dati annidati utilizzando marcatori di blocco tipizzati: TC_OBJECT (0x73), TC_CLASS (0x76), TC_ARRAY (0x75), TC_STRING (0x74) e TC_NULL (0x70).
La serializzazione è stata ampiamente utilizzata per il caching dello stato delle applicazioni, il passaggio di oggetti tra JVM e la persistenza dei dati di configurazione. Tuttavia, la deserializzazione Java è una nota vulnerabilità di sicurezza - stream creati ad arte possono sfruttare «gadget chains» nel classpath per ottenere l'esecuzione di codice remoto. Java 9 ha introdotto ObjectInputFilter per limitare quali classi possono essere deserializzate, e le moderne linee guida di Java sconsigliano vivamente l'uso di file .ser per dati non attendibili.
Le alternative moderne preferite includono JSON (tramite Jackson o Gson), Protocol Buffers o Kryo. GeneMapper (Thermo Fisher Scientific) utilizza i file .ser per i dati dei progetti di bioinformatica. L'utility SerializationDumper può ispezionare i contenuti .ser senza eseguirli.
Sicurezza e incolumità
RISCHIO: HIGHLa deserializzazione Java è una delle superfici di attacco a più alta gravità nelle applicazioni Java (storicamente nella OWASP Top 10). L'apertura di un file .ser non attendibile in un'applicazione vulnerabile può eseguire codice arbitrario tramite gadget chains (rif. exploit Apache Commons Collections, 2015). Gli utenti finali dovrebbero aprire solo file .ser provenienti da fonti attendibili e nella loro applicazione prevista. Per l'analisi di file .ser sconosciuti: utilizzare SerializationDumper (dump statico, non esegue il payload) invece di deserializzarli in una JVM attiva.
Dettagli del formato
in sintesi- File di progetto GeneMapper - Il software GeneMapper di Applied Biosystems/Life Technologies utilizza .ser come contenitore proprietario per i dati di progetto.
- Cache dati di applicazioni generiche - Qualsiasi applicazione Java può serializzare oggetti arbitrari in .ser; i contenuti sono interamente specifici dell'applicazione.
Programmi che aprono file SER
Dettagli tecnici
specifiche approfondite| Magic bytes | AC ED 00 05 all'offset 0 - STREAM_MAGIC (0xACED) seguito da STREAM_VERSION (0x0005) |
| Codifica | Binaria, big-endian |
| Tipo MIME | application/x-java-serialized-object |
| API di serializzazione | java.io.ObjectOutputStream (scrittura) / java.io.ObjectInputStream (lettura); le classi devono implementare java.io.Serializable |
| Versione del protocollo | Protocollo di serializzazione versione 2 (stream versione 5), stabile da Java 1.2 |
| Versioning delle classi | Ogni classe incorpora un serialVersionUID; una mancata corrispondenza della versione genera InvalidClassException al momento della deserializzazione |
| Marcatori di contenuto | TC_OBJECT (0x73), TC_CLASS (0x76), TC_ARRAY (0x75), TC_STRING (0x74), TC_NULL (0x70) |
| Rischio di sicurezza | Noto vettore di attacco tramite deserializzazione gadget-chain; Java 9+ mitiga tramite allow-listing delle classi con ObjectInputFilter |
| Dimensione tipica | Da pochi byte per oggetti semplici fino a centinaia di MB per grafi di oggetti serializzati di grandi dimensioni |
| Portabilità della piattaforma | Leggibile da qualsiasi JVM su Windows, Linux o macOS; non portabile al di fuori dell'ecosistema Java |
| Compressione dello stream | Non compresso a livello di formato; l'incapsulamento in GZIPOutputStream è applicato opzionalmente a livello applicativo |
| Integrità | Nessun checksum integrato; l'integrità è fornita dalla firma a livello applicativo o dal trasporto sicuro |
| Applicazione nota | GeneMapper (Thermo Fisher Scientific) utilizza .ser per i file di progetto e di dati bioinformatici |
| Rilasciato | 1997 (Java 1.1, JDK 1.1) |
| Ultima versione | Stream version 5 (serialization protocol version 2, since Java 1.2) |
| Standard aperto | Sì · royalty-free |
| Specifica | docs.oracle.com |
Conversioni SER
Domande e risposte della community
chiesto dagli utentiAncora nessuna domanda - sii il primo a chiedere informazioni sui file SER.