Denne guiden vil vise deg hvordan du kan lagre dine økter sikkert i en MySQL database. Vi vil også kryptere alle session data som går inn i databasen, som betyr at hvis noen klarer å hacke inn i databasen alle session data er kryptert med 256-bit AES-kryptering.
Trinn
Konfigurer mysql database
- 1Lag en mysql database.
Se hvordan du Create-a-database-in-phpmyadmin.
Lag database kode:
Merk: Enkelte vertstjenester ikke tillate deg å lage en database via phpMyAdmin, Lær hvordan du gjør det i cPanel. - 2Lag en bruker med bare velge, sette inn og slette privilegier.
- Bruker: "sec_user"
- Passord: "eKcGZr59zAa2BEWU"
Opprett bruker koden:
Merk: Det er en god idé å endre passordet i koden ovenfor når du kjører på din egen server. (Pass på at du endrer din PHP-kode også.) Husk at det ikke trenger å være et passord som du kan huske så gjør det så komplisert som mulig. Her er et tilfeldig passord generator. - 3Lag en mysql tabell kalt "sessions".
Skape "sessions" tabell:
Vi bruker CHAR datatype for felt vi kjenner lengden, som felt "id" og "session_key" vil alltid være 128 tegn. Ved hjelp av CHAR her sparer på prosessorkraft.
Lag session.class.php fil
- 1Lag klassen.
Ny klasse: - 2Lag __ construct funksjon.
Denne funksjonen setter vår tilpasset sesjon behandleren slik at den er klar for bruk så snart som den klassen er instansiert (dvs. laget / bygd / konstruert).
__construct funksjon:funksjon __ construct () { / / Satt våre egne session funksjoner. / / Denne linjen forhindrer uventede effekter ved bruk av gjenstander som sparer handlere. register_shutdown_function ('session_write_close'); }
- 3Lag start_session funksjon.
start_session funksjon:funksjon start_session ($ session_name, $ sikker) { / / Pass på at session cookie er ikke tilgjengelig via javascript. $ Httponly = true; / / Hash algoritme som skal brukes for sesjons. (Bruk hash_algos () for å få en liste over tilgjengelige hasher.) $ Session_hash = 'SHA512'; / / Sjekk om hasj er tilgjengelig if (in_array ($ session_hash, hash_algos ())) { / / Sett har funksjon. ini_set ('session.hash_function', $ session_hash); } / / Hvor mange biter per tegn av hasj. / / De mulige verdiene er '4 '(0-9, AF), '5' (0-9, av), og '6 '(0-9, az, AZ, "-", ","). ini_set ('session.hash_bits_per_character', 5); / / Tving økten for å bare bruke informasjonskapsler, ikke URL variabler. ini_set ('session.use_only_cookies', 1); / / Få session cookie parametere $ CookieParams = session_get_cookie_params (); / / Sett parametrene / / Endre økten navn session_name ($ session_name); / / Nå har vi katt starte økten session_start (); / / Denne linjen regenererer økten og slette den gamle. / / Det genererer også en ny krypteringsnøkkel i databasen. session_regenerate_id (true); }
- 4Lag åpen funksjon.
open funksjon:funksjon open () { $ Host = 'localhost'; $ User = 'sec_user'; $ Pass = 'eKcGZr59zAa2BEWU'; $ Name = 'secure_sessions'; $ Mysqli = new mysqli ($ host, $ bruker, $ pass, $ navn); $ Dette -> db = $ mysqli; return true; }
- 5Lag tett funksjon.
nært funksjon:funksjon close () { $ Dette -> db -> close (); return true; }
- 6Lag lese funksjon.
Vi har også dekryptere session data som er kryptert i databasen. Vi bruker 256-bit AES-kryptering i våre økter.
Lesefunksjonen:funksjon read ($ id) { if (isset ($ dette -> read_stmt)) { $ Dette -> read_stmt = $ dette -> db -> forberede ("velge data fra økter WHERE id = LIMIT 1?"); } $ Dette -> read_stmt -> bind_param ('s', $ id); $ Dette -> read_stmt -> utføre (); $ Dette -> read_stmt -> store_result (); $ Dette -> read_stmt -> bind_result ($ data); $ Dette -> read_stmt -> hente (); $ Key = $ dette -> getKey ($ id); $ Data = $ this -> dekryptere ($ data, $ key); returnere $ data; }
- 7Lag skrive funksjon.
skrive funksjon:funksjon write ($ id, $ data) { / / Få unik nøkkel $ Key = $ dette -> getKey ($ id); / / Kryptere dataene $ Data = $ this -> kryptere ($ data, $ key); $ Tid = tid (); if (isset ($ dette -> w_stmt)) { $ Dette -> w_stmt = $ dette -> db -> forberede ("BYTT TIL økter (id, set_time, data, session_key) VALUES (,,,)??"); } $ Dette -> w_stmt -> bind_param (Siss ', $ id, $ tid, $ data, $ key); $ Dette -> w_stmt -> utføre (); return true; }
- 8Lag ødelegge funksjonen.
ødelegge funksjon:fungere ødelegge ($ id) { if (isset ($ dette -> delete_stmt)) { $ Dette -> delete_stmt = $ dette -> db -> forberede ("DELETE FROM økter WHERE id =?"); } $ Dette -> delete_stmt -> bind_param ('s', $ id); $ Dette -> delete_stmt -> utføre (); return true; }
- 9Lag gc (garbage collector)-funksjonen.
GC ()-funksjonen:funksjon gc ($ max) { if (isset ($ dette -> gc_stmt)) { $ Dette -> gc_stmt = $ dette -> db -> forberede ("DELETE FROM økter WHERE set_time <?"); } $ Gammel = tid () - $ max; $ Dette -> gc_stmt -> bind_param ('s', $ gammel); $ Dette -> gc_stmt -> utføre (); return true; }
- 10Lag getKey funksjon.
getKey () Funksjon:privat funksjon getKey ($ id) { if (isset ($ dette -> key_stmt)) { $ Dette -> key_stmt = $ dette -> db -> forberede ("SELECT session_key FRA økter WHERE id = LIMIT 1?"); } $ Dette -> key_stmt -> bind_param ('s', $ id); $ Dette -> key_stmt -> utføre (); $ Dette -> key_stmt -> store_result (); if ($ dette -> key_stmt -> NUM_ROWS == 1) { $ Dette -> key_stmt -> bind_result ($ key); $ Dette -> key_stmt -> hente (); returnere $ key; } Else { $ Random_key = hash ('SHA512', uniqid (mt_rand (1, mt_getrandmax ()), true)); returnere $ random_key; } }
- 11Lag kryptere og dekryptere funksjoner.
kryptere () og dekryptere () funksjoner:privat funksjon kryptere ($ data, $ key) { $ Salt = 'cH swe retReGu7W6bEDRup7usuDUh9THeD2CHeGE * ewr4n39 = E @ rAsp7c-Ph @ pH!'; $ Key = substr (hash ('SHA256', $ salt $ key $ salt), 0, 32..); $ Iv_size = mcrypt_get_iv_size (MCRYPT_RIJNDAEL_256, MCRYPT_MODE_ECB); $ Iv = mcrypt_create_iv ($ iv_size, MCRYPT_RAND); $ Kryptert = base64_encode (mcrypt_encrypt (MCRYPT_RIJNDAEL_256, $ key, $ data, MCRYPT_MODE_ECB, $ iv)); returnere $ kryptert; } privat funksjon dekryptere ($ data, $ key) { $ Salt = 'cH swe retReGu7W6bEDRup7usuDUh9THeD2CHeGE * ewr4n39 = E @ rAsp7c-Ph @ pH!'; $ Key = substr (hash ('SHA256', $ salt $ key $ salt), 0, 32..); $ Iv_size = mcrypt_get_iv_size (MCRYPT_RIJNDAEL_256, MCRYPT_MODE_ECB); $ Iv = mcrypt_create_iv ($ iv_size, MCRYPT_RAND); $ Dekryptert = mcrypt_decrypt (MCRYPT_RIJNDAEL_256, $ key, base64_decode ($ data), MCRYPT_MODE_ECB, $ iv); returnere $ dekryptert; }
- 12Ende klasse.
End-klasse:}
Opprette sider med økter
- 1Bruke økter med tilpasset session manager.
Under den hvor du vil starte en ny sesjon, ville du trenger å inkludere dette hver side du ønsker å få tilgang til økter, bruke den i stedet for session_start ();
Starte en sesison: