So erstellen sie ein sicheres sitzungsmanagementsystem in php und mysql
Dieser Anleitung zeigt Ihnen, wie Sie Ihre Sitzungen sicher in einer MySQL-Datenbank speichern können. Wir werden auch alle Sitzungsdaten verschlüsseln, die in die Datenbank gelangen, was bedeutet, was bedeutet, wenn jemand in die Datenbank gehalten wird, in der Datenbank alle Sitzungsdaten von 256-Bit-AES-Verschlüsselung verschlüsselt werden.
Schritte
Methode 1 von 3:
Konfigurieren Sie die MySQL-Datenbank1. Erstellen Sie eine MySQL-Datenbank.
In diesem Handbuch erstellen wir eine Datenbank mit dem Namen "Secure_ssessions".
Sehen wie to Erstellen-A-Datenbank-in-phpMyadmin.
Oder Sie können den untenstehenden SQL-Code verwenden, der für Sie einen erstellt.
Datenbankcode erstellen:
In diesem Handbuch erstellen wir eine Datenbank mit dem Namen "Secure_ssessions".
Sehen wie to Erstellen-A-Datenbank-in-phpMyadmin.
Oder Sie können den untenstehenden SQL-Code verwenden, der für Sie einen erstellt.
Datenbankcode erstellen:
Datenbank erstellen `Secure_ssessions` -

2. Erstellen Sie einen Benutzer, mit dem nur Berechtigungen ausgewählt, einfügen und löschen.
Dies bedeutet, dass der Hacker, wenn der Hacker immer einen Sicherheitsverstoß in unserem Skript gab, den der Hacker nicht aus unserer Datenbank fallen lassen konnte.Wenn Sie wirklich paranoid sind, erstellen Sie einen anderen Benutzer für jede Funktion.
Dies bedeutet, dass der Hacker, wenn der Hacker immer einen Sicherheitsverstoß in unserem Skript gab, den der Hacker nicht aus unserer Datenbank fallen lassen konnte.Wenn Sie wirklich paranoid sind, erstellen Sie einen anderen Benutzer für jede Funktion.
Benutzercode erstellen:
Erstellen Sie den Benutzer `SEC_USER` @ `localhost` von `ekcgzr59za2cewu`-grant Select, einfügen, aktualisieren, löschen auf `Secure_ssessions identifiziert`.* Zu `sec_user` @ `localhost`-
Hinweis: Es ist eine gute Idee, das Kennwort in dem obigen Code zu ändern, wenn Sie auf Ihrem eigenen Server ausgeführt werden. (Stellen Sie sicher, dass Sie Ihren PHP-Code ändern.) Erinnern Sie sich daran, dass es kein Passwort sein muss, an das Sie sich erinnern können, so dass es so kompliziert wie möglich ist. Hier ist ein zufälliges Passwort Generator.

3. Erstellen Sie eine MySQL-Tabelle mit dem Namen "Sitzungen".
Der untenstehende Code erstellt eine Tabelle mit 4 Feldern (ID, Set_Time, Daten, Session_Key).
Erstellen Sie das "Sitzungen" Tabelle:
Der untenstehende Code erstellt eine Tabelle mit 4 Feldern (ID, Set_Time, Daten, Session_Key).
Erstellen Sie das "Sitzungen" Tabelle:
Erstellen Sie Tabelle `Sessions` (` ID `char (128) nicht null,` set_time` char (10) nicht null, `Datenstext nicht null,` session_key` char (128) nicht null, primärer Schlüssel (`ID`) ) Motor = Innodb Standard Charset = Latin1-
Methode 2 von 3:
Sitzung erstellen.Klasse.PHP-Datei1. Klasse erstellen.
Um eine neue Klasse zu starten, müssen Sie den folgenden Code eingeben:
Neue Klasse:
Um eine neue Klasse zu starten, müssen Sie den folgenden Code eingeben:
Neue Klasse:
Klasse Session {

2. Erstellen Sie __Construct-Funktion.
Diese Funktion wird jedes Mal aufgerufen, wenn wir eine neue Instanz eines Objekts mithilfe der "Session-Klasse erstellen". Sie können auf der PHP __Construct-Funktion lesen Hier.
Diese Funktion legt unseren benutzerdefinierten Sitzungshandler fest, sodass er zur Verfügung steht, sobald die Klasse instanziiert ist (ich.E., gemacht / gebaut / gebaut).
__Construct-Funktion:
Diese Funktion wird jedes Mal aufgerufen, wenn wir eine neue Instanz eines Objekts mithilfe der "Session-Klasse erstellen". Sie können auf der PHP __Construct-Funktion lesen Hier.
Diese Funktion legt unseren benutzerdefinierten Sitzungshandler fest, sodass er zur Verfügung steht, sobald die Klasse instanziiert ist (ich.E., gemacht / gebaut / gebaut).
__Construct-Funktion:
Funktion __CONSTRUCT () {// Stellen Sie unsere benutzerdefinierten Sitzungsfunktionen ein.Session_Set_Save_Handler (ARRY ($ Dies, `Open`), Array ($ Dies, `Close`), Array ($ Dies, `Read`), Array ($ Dies, `Write`), Array ($ Dies, `Destroy` ), Array ($ Dies, `GC`) - // Diese Linie verhindert unerwartete Effekte, wenn Sie Objekte als Speichern von Handlern verwenden.register_shutdown_function (`session_write_close`) -}

3. Erstellen Sie Start_Session-Funktion.
Diese Funktion wird jedes Mal aufgerufen, wenn Sie eine neue Sitzung starten möchten, verwenden Sie sie anstelle von session_start ()-. Sehen Sie sich die Kommentare in den Code an, um zu sehen, was jede Zeile tut.
Start_Session-Funktion:
Diese Funktion wird jedes Mal aufgerufen, wenn Sie eine neue Sitzung starten möchten, verwenden Sie sie anstelle von session_start ()-. Sehen Sie sich die Kommentare in den Code an, um zu sehen, was jede Zeile tut.
Start_Session-Funktion:
Funktion start_session ($ session_name, $ sicher) {// Stellen Sie sicher, dass der Sitzungscookie über jаvascript nicht erreichbar ist.$ httponly = true - // Hash-Algorithmus für die Sitzung verwenden. (Verwenden Sie hash_algos (), um eine Liste der verfügbaren Hashes zu erhalten.) $ session_hash = `sha512` - // Überprüfen Sie, ob HASH verfügbar ist.INI_SET (`SITZUNG.Hash_Function `, $ session_hash) -} // Wie viele Bits pro Charakter des Hashs.// Die möglichen Werte sind `4` (0-9, A-F), `5` (0-9, A-V) und `6` (0-9, A-Z, A-Z, "-", ",").INI_SET (`SITZUNG.hash_bits_per_character `, 5) - // Die Sitzung zwingen, nur Cookies zu verwenden, keine URL-Variablen.INI_SET (`SITZUNG.use_only_cookies `, 1) - // Session Cookie-Parameter $ CookieParams = Session_Get_cookie_params () - // Legen Sie die ParameterSession_set_cookie_params ($ cookieparams ["Lebensdauer"] $ Cookieparams ["Pfad"] $ Cookieparams ["Domain"], $ Secure, $ httponly) - // Ändern Sie den Sitzungsnamen Session_Name ($ session_name) - // Jetzt katieren wir die SESSIONSESSION_START () - // Diese Linie regeneriert die Sitzung und löscht den alten. // er generiert auch einen neuen Verschlüsselungsschlüssel in der Datenbank. session_regenererate_id (true) -}

4. Erstellen Sie eine offene Funktion.
Diese Funktion wird von den PHP-Sitzungen aufgerufen, wenn wir eine neue Sitzung starten, verwenden wir sie, um eine neue Datenbankverbindung zu starten.
Offene Funktion:
Diese Funktion wird von den PHP-Sitzungen aufgerufen, wenn wir eine neue Sitzung starten, verwenden wir sie, um eine neue Datenbankverbindung zu starten.
Offene Funktion:
Funktion offen () {$ host = `localhost` - $ user = `sec_user` - $ pass = `ekcgzr59zaa2wewu` - $ name = `Secure_ssessions` - $ mySqli = New MySqli ($ host, $ user, $ Pass, $ Name) ) - $ das->db = $ mysqli-return true-}

5. Close-Funktion erstellen.
Diese Funktion wird aufgerufen, wenn die Sitzungen geschlossen werden möchten.
Schließen Sie die Funktion:
Diese Funktion wird aufgerufen, wenn die Sitzungen geschlossen werden möchten.
Schließen Sie die Funktion:
Funktion close () {$ this->db->close () - Return true-}

6. Lesefunktion erstellen.
Diese Funktion wird von PHP aufgerufen, wenn wir versuchen, auf eine Sitzung zuzugreifen, zum Beispiel, wenn wir Echo $ _Session verwenden ["Etwas"]-. Da es viele Anrufe auf dieser Funktion auf einer einzigen Seite geben, nutzen wir von vorbereiteten Aussagen, nicht nur für die Sicherheit, sondern auch für die Leistung. Wir bereiten die Aussage nur einmal vor, dann können wir es oft ausführen.
Wir entschlüsseln auch die in der Datenbank verschlüsselten Sitzungsdaten. Wir verwenden 256-Bit-AES-Verschlüsselung in unseren Sitzungen.
Lesefunktion:
Diese Funktion wird von PHP aufgerufen, wenn wir versuchen, auf eine Sitzung zuzugreifen, zum Beispiel, wenn wir Echo $ _Session verwenden ["Etwas"]-. Da es viele Anrufe auf dieser Funktion auf einer einzigen Seite geben, nutzen wir von vorbereiteten Aussagen, nicht nur für die Sicherheit, sondern auch für die Leistung. Wir bereiten die Aussage nur einmal vor, dann können wir es oft ausführen.
Wir entschlüsseln auch die in der Datenbank verschlüsselten Sitzungsdaten. Wir verwenden 256-Bit-AES-Verschlüsselung in unseren Sitzungen.
Lesefunktion:
Funktion Lese ($ ID) {if (!Isset ($ Dies->read_stmt)) {$ das->read_stmt = $ das->db->bereiten("Wählen Sie Daten aus den Sitzungen aus, in denen id = ? Limit 1") -} $->read_stmt->binden_param (`s`, $ ID) - $ Dies->read_stmt->Execute () - $ Dies->read_stmt->store_result () - $ das->read_stmt->binden_result ($ data) - $ Dies->read_stmt->Fetch () - $ KEY = $ Dies->Getkey ($ ID) - $ data = $ Dies->Entschlüsseln ($ Daten, $ Key) -Return $ Daten

7. Schreibfunktion erstellen.
Diese Funktion wird verwendet, wenn wir einer Sitzung einen Wert zuweisen, zum Beispiel $ _SESSION [`etwas`] = `etwas anderes`-. Die Funktion verschlüsselt alle Daten, die in die Datenbank eingefügt werden.
Schreibfunktion:
Diese Funktion wird verwendet, wenn wir einer Sitzung einen Wert zuweisen, zum Beispiel $ _SESSION [`etwas`] = `etwas anderes`-. Die Funktion verschlüsselt alle Daten, die in die Datenbank eingefügt werden.
Schreibfunktion:
Funktion schreiben ($ ID, $ data) {// Holen Sie sich eindeutiger Schlüssel $ Key = $ Dies->Getkey ($ ID) - // verschlüsseln Sie die Daten $ Daten = $ Dies->verschlüsselt ($ data, $ key) - $ time = time () - wenn (!Isset ($ Dies->w_stmt)) {$ das->w_stmt = $ Dies->db->bereiten("Ersetzen Sie in Sessions (ID, Set_Time, Data, Session_Key) -Werte (?, ?, ?, ?)") -} $->w_stmt->binden_param (`siss`, $ ID, $ time, $ data, $ key) - $ Dies->w_stmt->Execute () - RETURN TRUE-}

8. Zerstörungsfunktion erstellen.
Diese Funktion löscht die Sitzung aus der Datenbank, es wird von PHP verwendet, wenn wir Funktionen wie Session__Destroy () anrufen ()-.
Funktion zerstören:
Diese Funktion löscht die Sitzung aus der Datenbank, es wird von PHP verwendet, wenn wir Funktionen wie Session__Destroy () anrufen ()-.
Funktion zerstören:
Funktion zerstören ($ ID) {if (!Isset ($ Dies->delete_stmt)) {$ das->delete_stmt = $ Dies->db->bereiten("Löschen von Sitzungen, in denen id = ?") -} $->delete_stmt->binden_param (`s`, $ ID) - $ Dies->delete_stmt->Execute () - RETURN TRUE-}

9. GC-Funktion erstellen (Müllkollektor).
Diese Funktion ist die Müllkollektorfunktion, die aufgerufen wird, um alte Sitzungen zu löschen. Die Häufigkeit, in der diese Funktion aufgerufen wird, wird von zwei Konfigurationsrichtlinien, Sitzungen bestimmt.GC_PROBILITÄT UND SITZUNG.GC_DIVISOR.
GC () Funktion:
Diese Funktion ist die Müllkollektorfunktion, die aufgerufen wird, um alte Sitzungen zu löschen. Die Häufigkeit, in der diese Funktion aufgerufen wird, wird von zwei Konfigurationsrichtlinien, Sitzungen bestimmt.GC_PROBILITÄT UND SITZUNG.GC_DIVISOR.
GC () Funktion:
Funktion GC ($ max) {if (!Isset ($ Dies->gc_stmt)) {$ das->gc_stmt = $ Dies->db->bereiten("Löschen Sie aus Sitzungen, in denen Set_time < ?") -} $ old = time () - $ max->gc_stmt->binden_param (`s`, $ alte) - $ Dies->gc_stmt->Execute () - RETURN TRUE-}

10. Getkey-Funktion erstellen.
Diese Funktion wird verwendet, um den eindeutigen Schlüssel zur Verschlüsselung von der Sitzungstabelle zu erhalten. Wenn keine Sitzung vorhanden ist, gibt es einfach einen neuen Zufallsschlüssel zur Verschlüsselung zurück.
Getkey () Funktion:
Diese Funktion wird verwendet, um den eindeutigen Schlüssel zur Verschlüsselung von der Sitzungstabelle zu erhalten. Wenn keine Sitzung vorhanden ist, gibt es einfach einen neuen Zufallsschlüssel zur Verschlüsselung zurück.
Getkey () Funktion:
Privatfunktion Getkey ($ ID) {if (!Isset ($ Dies->key_stmt)) {$ das->key_stmt = $ Dies->db->bereiten("Wählen Sie Session_Key aus den Sitzungen, in denen ID = ? Limit 1") -} $->key_stmt->binden_param (`s`, $ ID) - $ Dies->key_stmt->Execute () - $ Dies->key_stmt->store_result () - wenn ($ das->key_stmt->Num_Rows == 1) {$ das->key_stmt->binden_result ($ KEY) - $ Dies->key_stmt->Fetch () - Rückgabe $ Key-} else {$ random_key = Hash (`sha512`, uniqid (mt_rand (1, mt_getrandmax (mt_rand (1, mt_getrandmax (mt_rand (1, mt_getrandmax (mt_rand (1, mt_getrandmax (mt_rand (1, mt_getrandmax), true) - Return $ random_key-}}

11. Verschlüsseln und Entschlüsseln von Funktionen erstellen.
Diese Funktionen verschlüsseln die Daten der Sitzungen, sie verwenden einen Verschlüsselungsschlüssel aus der Datenbank, die für jede Sitzung unterschiedlich ist. Wir verwenden diesen Schlüssel nicht direkt in der Verschlüsselung, aber wir verwenden ihn, um den Schlüssel Hash noch mehr zufällig zu machen.
Encrypt () und Entschlüsselung () Funktionen:
Diese Funktionen verschlüsseln die Daten der Sitzungen, sie verwenden einen Verschlüsselungsschlüssel aus der Datenbank, die für jede Sitzung unterschiedlich ist. Wir verwenden diesen Schlüssel nicht direkt in der Verschlüsselung, aber wir verwenden ihn, um den Schlüssel Hash noch mehr zufällig zu machen.
Encrypt () und Entschlüsselung () Funktionen:
Privatfunktion verschlüsseln ($ data, $ key) {$ salz = `ch!Sweat!retregu7w6bedrup7usuduh9th2Chege * EWR4N39 = E @ Rasp7c-pH @ pH `- $ KEY = SUBSTR (Hash (SHA256`, $ SALT.$ Key.$ salz), 0, 32) - $ IV_SIZE = MCYPT_GET_IV_SIZE (MCYPT_MODE_ECB_256, MCYPT_MODE_ECB) - $ IV = MCYPT_CRYPTE_IV ($ IV_SIZE, MCYPT_RAND) - $ verschlüsselt = base64_encode (mcrypt_encrypt (McYPT_RIJNDAEL_256, $ KEY, $ Data, McYPT_MODE_ECB, $ IV) ) -Return $ verschlüsselt-} Privatfunktion Entschlüsseln ($ Daten, $ Key) {$ salz = `ch!Sweat!retregu7w6bedrup7usuduh9th2Chege * EWR4N39 = E @ Rasp7c-pH @ pH `- $ KEY = SUBSTR (Hash (SHA256`, $ SALT.$ Key.$ salz), 0, 32) - $ IV_SIZE = MCYPT_GET_IV_SIZE (MCYPT_MODE_ECB) - $ IV = MCYPT_CRYPTE_IV ($ IV_SIZE, MCYPT_RAND) - $ decryppted = McYPT_DECRYPT (MCYPT_RIJNDAEL_256, $ KEY, BASE64_DECODE ($ Daten), McYPT_MODE_ECB, $ IV $ ) - $ entschlüsselt = rtrim ($ entschlüsselt, " 0") -return $ entschlüsselt}

12. Endklasse.
Hier beenden wir einfach die klassen gelockten Klammern:
Endklasse:
Hier beenden wir einfach die klassen gelockten Klammern:
Endklasse:
}
Methode 3 von 3:
Seiten mit Sitzungen erstellen1. Verwenden von Sitzungen mit dem benutzerdefinierten Sitzungsmanager.
Nachfolgend würden Sie eine neue Sitzung beginnen - Sie müssen dies auf jeder Seite aufnehmen, auf die Sie auf die Sitzungen zugreifen möchten, Verwenden Sie es anstelle von session_start ()-
Starten einer Sitzung:
Nachfolgend würden Sie eine neue Sitzung beginnen - Sie müssen dies auf jeder Seite aufnehmen, auf die Sie auf die Sitzungen zugreifen möchten, Verwenden Sie es anstelle von session_start ()-
Starten einer Sitzung:
erfordern (`Sitzung.Klasse.PHP `) - $ Session = New Session () - // Setzen Sie auf true, wenn Sie HTTPS $ Session verwenden->start_session (`_ s`, false) - $ _ Sitzung [`Etwas`] = `Ein Wert.`-Echo $ _Session [` Etwas `]-