Diverse metode de autentificare pentru proiecte web

E inevitabil ca programator sa ajungi sa creezi un produs web care sa aiba nevoie de autentificare. Ideal ar fi sa cunosti cat mai multe variante de implementare si sa alegi cazul care se potriveste cerintelor tale.

O sa enumar mai jos variantele pe care le-am folosit de-a lungul timpului si care te pot ajuta si pe tine candva.

HTTP basic authentication

Folderul pe care incerci sa-l protejezi va contine doua fisiere: unul .htaccess si unul .htpasswd care va contine efectiv userul si parola.
Usurinta consta in faptul ca-l poti implementa direct din cPanel la rubrica Directory Privacy si e independent de codul aplicatiei in sine (nu trebuie sa faci pagina de login)

Dezavantajul major ar fi ca pe conexiunile necriptate (http), userul si parola pot fi interceptate pentru ca sunt trimise in headerele request-urilor.

Cookie/Sesiune simpla

Primul sistem de autentificare pe care imi aduc aminte ca l-am facut a constat in verificarea datelor introduse de om in pagina de login si daca se regaseau cu cele din codul sursa, faceam $_COOKIE[‘logged’] = true; si mai apoi in fiecare pagina verificam existenta si valoarea acelui cookie.

Dezavantajul major era ca in cazul mai multor useri, nu stiam cine e persoana logata pentru ca nu aveam nicio alta referinta in afara de valoarea “true” a cookie-ului respectiv.

Prima rezolvare care iti vine in minte in cazul asta e sa pui in loc de “true”, ID-ul acelui user. In cazul asta gandeste-te ca userul poate modifica cookie-ul si inlocuieste 1 cu 2 si deja e logat cu alt user.

O rezolvare destul de safe pentru majoritatea cazurilor e ca in loc de cookie sa folosesti sesiuni. Functioneaza la fel ca un cookie doar ca nu mai poate fi editata de catre utilizator.

Cookie/Sesiune complexa

Cu timpul obisnuindu-te sa lucrezi din ce in mai profi, vei ajunge sa ai cereri de genul login history, nu lasa un user logat logat de mai multe ori in acelasi timp, blocat contul dupa x logari nereusite etc.

In cazul asta varianta e ca la logarea reusita sa generezi un token (un sir de caractere aleator) pe care sa-l stochezi la utilizator prin cookie/sesiune si in baza ta de date la tine. Verificarea daca e logat se face comparand acel token cu ce ai tu salvat in baza de date si in felul asta afli ID-ul utilizatorului.
Mai departe imaginatia e limita, poti verifica daca IP-ul cu care s-a logat e acelasi cu cel care incearca accesarea, poti seta o durata de viata pt acel token, poti face verificarea doar cu ultimul token (pentru interzicerea accesului multiplu) etc.

Daca ai de gand sa tii parola in baza de date, n-o pastra niciodata asa cum o introduce utilizatorul ci cripteaz-o folosind o cheie unica (ex: functia crypt in PHP). Ideea e ca daca cineva ajunge sa aiba acces la baza de date sa nu vada ce parola exista (pt ca stim ca mai sunt cazuri in care unii folosesc aceeasi parola pt mai multe site-uri si mai mult ca sigur acea parola e asociata cu o adresa de email).

Sunt curios voi ce fel de verificari faceti atunci cand vine vorba de autentificari sau daca ati primit cerinte ciudate de la clienti pentru acest aspect.

 

One Reply to “Diverse metode de autentificare pentru proiecte web”

Leave a Reply

Your email address will not be published. Required fields are marked *