Secure PHP Session


Sunt mai multe metode de a securiza o sesiune in PHP, dar cea mai buna metoda este de a le combina intre ele pe toate.

O sesiune PHP ne permite sa pastram in memorie continutul unei variabile pe tot parcursul navigarii printre paginile site-ului sau aplicatiei PHP. In primul rand, pentru a putea stoca o variabila, va trebui sa initiem sesiunea.

Sa luam un exemplu de sesiune pentru log in intr-o anumita arie din site. Sarim direct la pasul in care verificam daca userul exista in baza de date (autentificarea se face pe baza de e-mail si parola).

if ($count == 1) {
	session_start();
	$_SESSION['autentificat'] = sha1("124352356257^%@^#(79e21ed12");
	$_SESSION['browser'] = md5($_SERVER['HTTP_USER_AGENT']);
        $_SESSION['ip'] = $_SERVER['REMOTE_ADDR'];
} else {
	return false;
}


Dupa cum vedeti, in cazul in care utilizatorul s-a autentificat corespunzator si datele sale exista in baza de date (mail si parola), atunci vom porni sesiunea cu functia session_start(). In sesiunea PHP deschisa vom stoca 3 variabile pe tot parcursul navigarii: o variabila care ne spune ca user-ul este autentificat (codata in sha1), semnatura browser-ului si adresa ip dupa care s-a facut inregistrarea.

Pastram aceste 3 date pentru ca:

  • - variabila $_SESSION['autentificat'] ne permite sa verificam daca user-ul este autentificat sau nu
  • - variabila $_SESSION['browser'] ne permite sa verificam daca utilizatorul nu schimba browser-ul pe parcursul navigarii (daca a fost schimbat browser-ul si el a ramas autentificat inseamna ca key-ul sesiunii a fost copiat, deci user-ul nu are de ce sa ramana in aria securizata)
  • - variabila $_SESSION['ip'] ne permite sa verificam daca utilizatorul autentificat si-a modificat adresa IP (acelasi lucru ca si pentru semnatura browser-ului)

Acum sa vedem cum putem securiza propriu-zis sesiunea PHP. In fisierul care contine header-ul site-ului (sau in fisierul in care verificati daca un utilizator este autentificat sau nu) operati urmatoarele modificari.

session_start();
session_regenerate_id();
session_regenerate_id(true);

Este foarte important sa folositi functia de session_regenerate_id() pentru ca, in cazul in care un rauvoitor a extras din calculatorul unei victime key-ul sesiunii, acesta se poate autentifica in zona securizata. Regenerand sesiunea la fiecare schimbare de pagina, key-ul sau se schimba, deci un key vechi nu va avea nicio valoarea. Toate datele stocate in sesiune vor fi pastrare chiar daca aceasta este regenerata, singurul lucru care se va schimba va fi key-ul sau.

Acum sa verificam daca utilizatorul este autentificat si daca este curat.

if ( $_SESSION['autentificat']  sha1("124352356257^%@^#(79e21ed12") || $_SESSION['browser']  md5($_SERVER['HTTP_USER_AGENT']) || $_SESSION['ip']  $_SERVER['REMOTE_ADDR']) {
	header('Location: login.php');
}

In cazul in care continutul variabilei $_SESSION['autentificat'] este diferit de cel stabilit la autentificare sau in cazul in care semnatura browser-ului a fost schimbata sau adresa IP nu coincide cu cea din momentul autentificarii, atunci utilizatorul va fi redirectionat catre pagina de log in, ferind continutul de accesari rauvoitoare.

In final, cel mai important lucru.

session_destroy();

Functia de log out trebuie sa stearga tot continutul sesiunii deschise pentru a preveni accesul persoanelor neautorizate.

C’ya next time!



Ti-a placut articolul Secure PHP Session?

Ai nevoie de rezolvarea unei probleme la informatica?

Iti recomandam si urmatoarele articole:

Discuta articolul Secure PHP Session



Contul tau

Categorii

Mozku Network

Ne gasesti si pe Facebook

Articole noi

Fisiere populare

  • Proiect Atestat Informatica Visual FoxPro (439)
  • Twitter Patterns (202)
  • Flash Newsletter (126)
  • hitTest Flash (99)
  • Baza de date auto revizuita (98)

Marcaje articole