Die Deserialisierung ist der Prozess der Umkehrung von Daten, die in einem bestimmten Format gespeichert sind, z. B. ein Serialisierungsformat, das für JSON oder PHP einzigartig ist, in eine Objekt- oder Datenstruktur. In PHP erfolgt die Deserialisierung häufig durch die Funktion "unserialisiert ()", mit der die nach der Serialisierung gespeicherten Daten unter Verwendung der Funktion "Serialize ()` auf das ursprüngliche Objekt oder das ursprüngliche Array gespeichert werden können.
In PHP scheint die Deserialisierung ein einfacher Prozess zu sein, und viele Entwickler verwenden diese Funktion häufig in ihrem Code. Zum Beispiel:
Klassenbenutzer { öffentlich $ name; öffentliche $ -M -E -Mail; } $ user = new user (); $ user-> name = "alice"; $ user-> mail = "[email protected]"; // serialisiertes Objekt $ serializedUser = serialize ($ user); // Deserialize -Objekt $ unserialisiertemuser = unserialisiert ($ serializedUser);
Obwohl dieser Vorgang im Erscheinungsbild nicht problematisch ist, besteht das potenzielle Risiko darin, dass die Deserialisierung schwerwiegende Sicherheitslücken führen kann.
Eines der wichtigsten Probleme, die durch Deserialisierung verursacht werden, ist die Sicherheit. Bösartige Benutzer können alle Objekte implantieren, indem sie die Daten steuern, die für die Funktion von "unserialize ()" bereitgestellt werden, und dann diese Objekte verwenden, um nicht autorisierte Operationen auszuführen.
Objektinjektionsangriffe sind eine häufige Art des Angriffs. Angreifer können bestimmte serialisierte Daten konstruieren, um ein Objekt einer vorhandenen Klasse zu erstellen und dann bestimmte Methoden auszulösen. Angenommen, es gibt eine Methode, die sensible Operationen enthält, und ein Angreifer kann diese Methode aufrufen, indem sie speziell gestaltete serialisierte Daten senden, was zu unnötigen Sicherheitslücken führt.
Klasse admin { öffentliche Funktion DeleteUser () { // Logik des Benutzers löschen} } // das böswillige Objekt, das vom Angreifer konstruiert wurde $ bösicoBect = 'O: 5: "admin": 0: {}'; // das böswillige Objekt unverzündet ($ bösartig);
In diesem Beispiel wird das böswillige Objekt falsch erstellt und die "Deleteurer-" -Methode ausgelöst, was möglicherweise die Sicherheit des gesamten Systems beeinflusst.
Das Fehlen einer wirksamen Datenüberprüfung während der Deserialisierung ist ebenfalls ein wichtiges Thema. Viele Entwickler führen bei der Deserialisierung keine Legalitätsprüfungen für Daten durch, wodurch Programme zum Absturz gebracht werden, wenn illegale Objekte verarbeitet oder unerwartete Antworten angezeigt werden. In diesem Fall kann ein Angreifer gefälschte Daten übergeben, um potenzielle Schwachstellen im Code auszunutzen.
Um die Sicherheitsrisiken durch Deserialisierung zu verringern, gibt es mehrere Praktiken, die Entwicklern helfen können.
Erwägen Sie, JSON anstelle von PHP-spezifischen Serialisierungsmethoden zu verwenden. JSON ist ein leichtes Datenaustauschformat, das nicht in der Lage ist, Code auszuführen. Selbst wenn die Daten manipuliert werden, kann ein Angreifer daher keinen ausführbaren Code injizieren.
$ data = ['name' => 'alice', 'mail' => '[email protected]']; $ jSondata = json_encode ($ data); // Serialisierung mit JSON $ decodedData = json_decode ($ jSondata); // Deserialisierung
PHP liefert einen zweiten Parameter für die "unserialisierende" Funktion, durch die nicht autorisierte Objekte eingeschränkt werden können. Wenn beispielsweise `unserialize ()` aufgerufen wird, kann die Klasse, die eine Deserialisierung ermöglicht, explizit definiert werden.
$ erlaubteClasses = ['Benutzer']; $ unserialisiertObject = unserialisiert ($ serializedData, ["erlaubt_classes" => $ erlaubteClasses]);
Die Deserialisierung von Objekten scheint in PHP eine einfache und bequeme Funktion zu sein, aber die Sicherheitsrisiken dahinter können nicht ignoriert werden. Entwickler müssen die relevanten Operationen der Deserialisierung ernst nehmen und geeignete Alternativen und Sicherheitsmaßnahmen ergreifen, um die potenzielle Angriffsfläche zu verringern. Nur indem die Sicherheit des Codes und die Zuverlässigkeit von Daten sichergestellt wird, kann die Datensicherheit von Anwendungen und deren Benutzer effektiv geschützt werden.