Hva er SER-filformatet?
En .ser-fil inneholder en Java serialized object stream - en binær koding av ett eller flere Java-objekter produsert av ObjectOutputStream og lest tilbake av ObjectInputStream. Formatet ble introdusert med Java 1.1 i 1997 og er definert i Java Object Serialization Specification.
Hver gyldig .ser-fil starter med den 4-byte lange magiske sekvensen AC ED 00 05: byte 0-1 inneholder STREAM_MAGIC (0xACED) og byte 2-3 inneholder STREAM_VERSION (0x0005). Strømmen koder hver objekts klassedeskriptor, felt og nøstede data ved hjelp av typede blokkmarkører: TC_OBJECT (0x73), TC_CLASS (0x76), TC_ARRAY (0x75), TC_STRING (0x74), og TC_NULL (0x70).
Serialisering ble mye brukt for caching av applikasjonstilstand, overføring av objekter mellom JVM-er og lagring av konfigurasjonsdata. Imidlertid er Java-deserialisering en kjent sikkerhetssårbarhet - ondsinnet utformede strømmer kan utnytte «gadget chains» i klassestien for å oppnå fjernkjøring av kode. Java 9 introduserte ObjectInputFilter for å begrense hvilke klasser som kan deserialiseres, og moderne Java-veiledning fraråder sterkt bruk av .ser-filer for upålitelige data.
Foretrukne moderne alternativer inkluderer JSON (via Jackson eller Gson), Protocol Buffers, eller Kryo. GeneMapper (Thermo Fisher Scientific) bruker .ser-filer for bioinformatikk-prosjektdata. Verktøyet SerializationDumper kan inspisere innholdet i .ser uten å kjøre dem.
Sikkerhet og trygghet
RISIKO: HIGHJava-deserialisering er en av de mest alvorlige angrepsflatene i Java-applikasjoner (historisk sett på OWASP Top 10). Å åpne en upålitelig .ser-fil i en sårbar applikasjon kan kjøre vilkårlig kode via «gadget chains» (f.eks. Apache Commons Collections-eksploiten fra 2015). Sluttbrukere bør kun åpne .ser-filer fra pålitelige kilder og i deres tiltenkte applikasjon. Ved analyse av ukjente .ser-filer: bruk SerializationDumper (statisk dump, kjører ikke nyttelasten) i stedet for å deserialisere dem i en aktiv JVM.
Formatdetaljer
i et nøtteskall- GeneMapper Project File - Applied Biosystems/Life Technologies GeneMapper-programvare bruker .ser som sin proprietære beholder for prosjektdata.
- Generisk applikasjonsdatacache - Enhver Java-applikasjon kan serialisere vilkårlige objekter til .ser; innholdet er helt applikasjonsspesifikt.
Programmer som åpner SER-filer
Tekniske detaljer
dyp spesifikasjon| Magiske byte | AC ED 00 05 ved offset 0 - STREAM_MAGIC (0xACED) etterfulgt av STREAM_VERSION (0x0005) |
| Koding | Binær, big-endian |
| MIME-type | application/x-java-serialized-object |
| Serialiserings-API | java.io.ObjectOutputStream (skriv) / java.io.ObjectInputStream (les); klasser må implementere java.io.Serializable |
| Protokollversjon | Serialiseringsprotokoll versjon 2 (strømversjon 5), stabil siden Java 1.2 |
| Klasseversjonering | Hver klasse bygger inn en serialVersionUID; versjonskonflikt kaster InvalidClassException ved deserialisering |
| Innholdsmarkører | TC_OBJECT (0x73), TC_CLASS (0x76), TC_ARRAY (0x75), TC_STRING (0x74), TC_NULL (0x70) |
| Sikkerhetsrisiko | Kjent angrepsvektor via deserialisering og «gadget-chains»; Java 9+ avbøter dette via ObjectInputFilter-hvitelisting |
| Typisk størrelse | Fra noen få byte for enkle objekter opp til hundrevis av MB for store serialiserte objektgrafer |
| Plattformportabilitet | Lesbar av enhver JVM på Windows, Linux eller macOS; ikke portabel utenfor Java-økosystemet |
| Strømkomprimering | Ukomprimert på formatnivå; GZIPOutputStream-innpakning kan valgfritt brukes på applikasjonsnivå |
| Integritet | Ingen innebygd sjekksum; integritet ivaretas av signering på applikasjonsnivå eller sikker transport |
| Kjent applikasjon | GeneMapper (Thermo Fisher Scientific) bruker .ser for bioinformatikk-prosjekter og datafiler |
| Utgitt | 1997 (Java 1.1, JDK 1.1) |
| Siste versjon | Stream version 5 (serialization protocol version 2, since Java 1.2) |
| Åpen standard | Ja · royalty-fri |
| Spesifikasjon | docs.oracle.com |
SER-konverteringer
Spørsmål og svar fra fellesskapet
spurt av brukereIngen spørsmål ennå - vær den første til å spørre om SER-filer.