Co to jest format pliku SER?
Plik .ser zawiera strumień zserializowanych obiektów Java - binarne kodowanie jednego lub więcej obiektów Java wytworzone przez ObjectOutputStream i odczytywane przez ObjectInputStream. Format ten został wprowadzony wraz z Java 1.1 w 1997 roku i jest zdefiniowany w specyfikacji Java Object Serialization Specification.
Każdy poprawny plik .ser zaczyna się od 4-bajtowej sekwencji magicznej AC ED 00 05: bajty 0-1 zawierają STREAM_MAGIC (0xACED), a bajty 2-3 zawierają STREAM_VERSION (0x0005). Strumień koduje deskryptor klasy każdego obiektu, pola oraz dane zagnieżdżone przy użyciu znaczników bloków typowanych: TC_OBJECT (0x73), TC_CLASS (0x76), TC_ARRAY (0x75), TC_STRING (0x74) oraz TC_NULL (0x70).
Serializacja była szeroko stosowana do buforowania stanu aplikacji, przesyłania obiektów między maszynami JVM oraz utrwalania danych konfiguracyjnych. Jednakże deserializacja Java jest znaną luką w zabezpieczeniach - złośliwie przygotowane strumienie mogą wykorzystywać łańcuchy gadżetów (gadget chains) w ścieżce klas (classpath) do zdalnego wykonania kodu. W Java 9 wprowadzono ObjectInputFilter, aby ograniczyć klasy, które mogą być deserializowane, a współczesne wytyczne Java zdecydowanie odradzają używanie plików .ser dla niezaufanych danych.
Preferowane nowoczesne alternatywy to JSON (przez Jackson lub Gson), Protocol Buffers lub Kryo. GeneMapper (Thermo Fisher Scientific) używa plików .ser do danych projektów bioinformatycznych. Narzędzie SerializationDumper pozwala na inspekcję zawartości .ser bez ich wykonywania.
Bezpieczeństwo
RYZYKO: HIGHDeserializacja Java to jedna z najpoważniejszych płaszczyzn ataku w aplikacjach Java (historycznie w OWASP Top 10). Otwarcie niezaufanego pliku .ser w podatnej aplikacji może spowodować wykonanie dowolnego kodu poprzez łańcuchy gadżetów (np. exploit Apache Commons Collections z 2015 r.). Użytkownicy końcowi powinni otwierać pliki .ser wyłącznie z zaufanych źródeł i w przeznaczonych do tego aplikacjach. Analiza nieznanych plików .ser: używaj SerializationDumper (statyczny zrzut, nie wykonuje ładunku) zamiast deserializować je w działającej maszynie JVM.
Szczegóły formatu
w pigułce- Plik projektu GeneMapper - Oprogramowanie GeneMapper firm Applied Biosystems/Life Technologies używa .ser jako własnościowego kontenera danych projektowych.
- Ogólny bufor danych aplikacji - Dowolna aplikacja Java może serializować dowolne obiekty do formatu .ser; zawartość jest całkowicie zależna od aplikacji.
Programy otwierające pliki SER
Szczegóły techniczne
specyfikacja| Magiczne bajty | AC ED 00 05 pod offsetem 0 - STREAM_MAGIC (0xACED) oraz STREAM_VERSION (0x0005) |
| Kodowanie | Binarne, big-endian |
| Typ MIME | application/x-java-serialized-object |
| API serializacji | java.io.ObjectOutputStream (zapis) / java.io.ObjectInputStream (odczyt); klasy muszą implementować java.io.Serializable |
| Wersja protokołu | Protokół serializacji wersja 2 (wersja strumienia 5), stabilny od Java 1.2 |
| Wersjonowanie klas | Każda klasa osadza serialVersionUID; niezgodność wersji powoduje rzucenie InvalidClassException podczas deserializacji |
| Znaczniki zawartości | TC_OBJECT (0x73), TC_CLASS (0x76), TC_ARRAY (0x75), TC_STRING (0x74), TC_NULL (0x70) |
| Ryzyko bezpieczeństwa | Znany wektor ataku typu deserialization gadget-chain; Java 9+ łagodzi ryzyko poprzez białe listy klas ObjectInputFilter |
| Typowy rozmiar | Od kilku bajtów dla prostych obiektów do setek MB dla dużych grafów zserializowanych obiektów |
| Przenośność platformy | Możliwy do odczytania przez dowolną maszynę JVM na Windows, Linux lub macOS; nieprzenośny poza ekosystem Java |
| Kompresja strumienia | Nieskompresowany na poziomie formatu; opcjonalnie stosowane opakowanie GZIPOutputStream na warstwie aplikacji |
| Integralność | Brak wbudowanej sumy kontrolnej; integralność zapewnia podpisywanie na warstwie aplikacji lub bezpieczny transport |
| Znana aplikacja | GeneMapper (Thermo Fisher Scientific) używa .ser dla plików projektów i danych bioinformatycznych |
| Wydano | 1997 (Java 1.1, JDK 1.1) |
| Najnowsza wersja | Stream version 5 (serialization protocol version 2, since Java 1.2) |
| Otwarty standard | Tak · bezpłatny (royalty-free) |
| Specyfikacja | docs.oracle.com |
Konwersje SER
Pytania i odpowiedzi społeczności
pytania użytkownikówBrak pytań - bądź pierwszą osobą, która zapyta o pliki SER.