Die Funktion der Serialisierungsfunktion besteht darin, eine PHP -Datenstruktur (wie Arrays, Objekte) in eine Zeichenfolge umzuwandeln. Durch diese Funktion können wir komplexe Daten in ein Format umwandeln, das gespeichert werden kann.
$data = array("username" => "admin", "password" => "123456");
$serialized_data = serialize($data);
echo $serialized_data;
Die Ausgangszeichenfolge ist wie folgt:
a:2:{s:8:"username";s:5:"admin";s:8:"password";s:6:"123456";}
Diese Zeichenfolge kann sicher in einer Datei oder Datenbank gespeichert werden. Wie bereits erwähnt, liefert Serialize selbst keinen Verschlüsselungsmechanismus, sodass die gespeicherten Daten einfacher Text sind und von Kriminellen leicht manipuliert oder gestohlen werden.
Um die Sicherheit von gespeicherten Daten während der Übertragung oder Speicherung zu gewährleisten, müssen die Serialisierungszeichenfolge in der Regel verschlüsselt. Zu den häufigen Verschlüsselungsmethoden gehören symmetrische Verschlüsselung und asymmetrische Verschlüsselung. In PHP können wir Verschlüsselungsfunktionen wie OpenSSL_encrypt , Natrium_Crypto_secretbox usw. verwenden, um Daten zu verschlüsseln.
Hier ist ein Beispielcode zum Verschlüsselung der Speicherung basierend auf Serialize :
$data = array("username" => "admin", "password" => "123456");
$serialized_data = serialize($data);
// Einen Schlüssel erzeugen(Im Allgemeinen sollte es vertraulich aufbewahrt werden)
$key = "secretkey123";
// verwenden OpenSSL Verschlüsselung
$encrypted_data = openssl_encrypt($serialized_data, "AES-128-ECB", $key);
// Speichern verschlüsselte Daten
echo "Encrypted: " . $encrypted_data;
Im obigen Code werden die Daten zuerst unter Verwendung von Serialize in eine Zeichenfolge konvertiert und dann von der Funktion openensl_encrypt verschlüsselt. Der symmetrische Verschlüsselungsalgorithmus AES-128-ECB wird hier verwendet (in tatsächlichen Anwendungen können Sie andere Verschlüsselungsmethoden auswählen). Nach der Verschlüsselung werden die Daten unlesbar.
Wenn wir gespeicherte verschlüsselte Daten verwenden müssen, können wir OpenSSL_Decrypt verwenden, um zu entschlüsseln:
$decrypted_data = openssl_decrypt($encrypted_data, "AES-128-ECB", $key);
$unserialized_data = unserialize($decrypted_data);
// Ausgabe entschlüsselter Daten
print_r($unserialized_data);
Nachdem wir durch OpenSSL_Decrypt entschlüsselt haben, können wir die unverzündete Funktion verwenden, um die verschlüsselten Daten in die ursprüngliche PHP -Datenstruktur wiederherzustellen.
Das Speichern verschlüsselter Daten ist nur ein Teil der Gewährleistung der Datensicherheit. Um die Sicherheit weiter zu verbessern, müssen wir einige zusätzliche Maßnahmen ergreifen:
Verwenden Sie beim Übertragen sensibler Daten das HTTPS -Protokoll, das sicherstellt, dass die Daten während der Übertragung nicht abgefangen werden.
Der für die Verschlüsselung verwendete Schlüssel muss stark und vertraulich sein. Vermeiden Sie es, einfache oder leicht erratene Schlüssel zu verwenden. Sie können OpenSSL_RANDOM_PSEUDO_BYTES verwenden, um einen zufälligen Schlüssel zu generieren:
$key = bin2hex(openssl_random_pseudo_bytes(16)); // erzeugen16Byteschlüssel
Regelmäßiger Schlüsselwechsel ist eine Best Practice. Selbst wenn ein Schlüssel durchgesickert ist, kann der Angreifer nicht auf alle Daten mit einem abgelaufenen Schlüssel zugreifen.
Stellen Sie sicher, dass nur autorisierte Benutzer oder Programme Zugriff auf sensible Daten haben. Verwenden Sie eine Access Control List (ACL) oder ein Rollenverwaltungssystem, um den Zugriff auf gespeicherte Daten zu begrenzen.
Wenn Sie PHP -Objekte speichern, müssen Sie vorsichtig sein, um POI -Angriffe (PHP -Objektinjektionen) zu verhindern. Vermeiden Sie beim Unerialisieren nicht vertrauenswürdige Eingaben. Wenn möglich, vermeiden Sie die Verwendung von nieserialisieren , um Daten aus Misstrauenquellen zu verarbeiten.
Sie können den Klassen mit den unverzählten Klassen einschränken, indem Sie erlaubte_classes verwenden:
$data = unserialize($encrypted_data, ["allowed_classes" => ["YourClass"]]);
Stellen Sie sicher, dass sensible Daten eine sichere Sicherung haben und dass die Sicherung selbst verschlüsselt werden muss. Überprüfen Sie regelmäßig die Effektivität und Sicherheit von Sicherungen, um Datenverluste oder Manipulationen zu vermeiden.