Was bedeutet es, dass die Instant.readObject-Methode "Defend [s] gegen bösartige Streams" aktiviert?

8

Beim Lesen des Quellcodes für Instant class stieß ich auf diese Methode

%Vor%

Die Beschreibung hat mich neugierig gemacht. Was ist ein "bösartiger Strom"? Und wie verteidigt sich diese Methode dagegen?

    
Luigi Cortese 11.12.2015, 11:31
quelle

2 Antworten

6

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.

    
JodaStephen 11.12.2015, 12:12
quelle
4

Joshua Bloch, der Autor von "Effective Java" hat seine idee über das Serialisierungs-Proxy-Muster. Sehr aufschlussreicher Hintergrund zu Ihrer Frage.

  

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 ...

%Vor%     
Meno Hochschild 11.12.2015 14:09
quelle

Tags und Links