Beim Lesen des Quellcodes für Instant
class stieß ich auf diese Methode
Die Beschreibung hat mich neugierig gemacht. Was ist ein "bösartiger Strom"? Und wie verteidigt sich diese Methode dagegen?
Instant
und andere java.time
-Klassen werden mit einem Paketbereichsdelegierten - java.time.Ser
- serialisiert. Sehen Sie sich die Methode writeReplace
an, um zu sehen, wie der Delegat erstellt wird.
Daher kann die readObject
-Methode nur aufgerufen werden, wenn jemand einen bösartigen Stream (einen, der nur zu dem Zweck erstellt wurde, ein ungültiges Objekt zu erstellen) weitergibt. Die Ausnahme stellt sicher, dass solche schädlichen Streams blockiert werden.
Im Allgemeinen sollten Sie bei jeder Verwendung eines Serialisierungsdelegaten in Betracht ziehen, readObject
wie folgt zu blockieren.
Joshua Bloch, der Autor von "Effective Java" hat seine idee über das Serialisierungs-Proxy-Muster. Sehr aufschlussreicher Hintergrund zu Ihrer Frage.
%Vor%Mit dieser writeReplace-Methode wird das Serialisierungssystem aktiviert Erzeugen Sie niemals eine serialisierte Instanz der einschließenden Klasse, sondern ein Angreifer könnte einen fabrizieren, um die Klasse zu verletzen " Invarianten. Um zu gewährleisten, dass ein solcher Angriff fehlschlägt, fügen Sie diesen einfach hinzu readObject-Methode zu der einschließenden Klasse ...