Documente Academic
Documente Profesional
Documente Cultură
aplicatii web
Autentificare, autorizare, state management intr-un mod sigur
Ce inseamna o aplicatie sigura?
▪ HTTPS
▪ Managementul Identitatii (autentificare, autorizare)
▪ Rezistenta la atacuri
▪ Acces restrictionat la componente critice
▪ Performanta
▪ Monitorizare
HTTPS
▪ HTTP + TLS
▪ Portul 443
▪ Trafic criptat
▪ Functioneaza pe baza de certificate, chei asimetrice
si chei simetrice
▪ Obligatoriu pentru orice implica comunicatie peste
internet
Managementul identitatii
intr-un sistem clasic
▪ Este nevoie de inregistrarea unui cont
▪ Conturi retinute in baza de date, intern
▪ Utilizatorii se autentifica cu credentialele setate la
inregistrarea contului
▪ Contul setat poate fi folosit doar in cadrul platformei
respective
▪ Permisiuni setate la nivel de sistem, business logic intern
Autentificare (Cine esti tu?)
▪ Procesul prin care o entitate isi demonstreaza identitatea intr-un
sistem
▪ Multe moduri de realizare: username si parola, token, date
biometrice, PIN, etc...
▪ Poate fi in straturi (multi factor authentication)
▪ Autentificarea rezulta, de obicei, in acces catre sistem
▪ Accesul se traduce in obiecte trimise clientului prin care acesta
demonstreaza ca s-a autentificat:
– Cookies
– Tokens
Autorizare (Ce poti face tu?)
▪ Resursele din sistem pot avea permisiuni
▪ Exemplu:
– Administratorul poate adauga feluri de mancare intr-un meniu
– Utilizatorul poate doar sa le vada
▪ Autorizarea completeaza identitatea unei entitati
▪ Permisiunile si rolurile trebuie stiute (doar) de backend
▪ Autorizarea, ca si autentificarea, sunt strans legate de
managementul identitatii unui utilizator
State management
▪ Backendul, implicit, este stateless
▪ Mecanismele de state management ajuta la retinerea
informatiilor intre cereri succesive
▪ Cookies
– Client side cookies
– Server side cookies (sessions)
▪ JWT Tokens
Cookies
▪ Un set de date stocat pe browserul utilizatorului
▪ Date de tipul Cheie=Valoare
▪ Pot fi persistente sau non-persistente (se sterg cand browserul se
inchide)
▪ Se ataseaza fiecarei cereri pe care browserul o executa
▪ Pot fi stocate si pe server
– In acest caz, backendul devine stateful
– Browserul retine un id pe care serverul il foloseste sa extraga informatii
▪ Niciodata nu stocati date de valoare in cookies!
Securizare Cookies
▪ In afara de cheie si valoare, cookies au mai multe optiuni ce ajuta la
securizarea acestora
▪ Domain
– Restrange domeniul (si subdomeniul) unde se trimit cookies
▪ HttpOnly
– Restrange accesul la cookies. Util impotriva atacurilor XSS (Cross Site Scripting)
– Un atacator nu va putea accesa cookies
▪ Secure
– Restrange transferul de cookies doar peste HTTPS
▪ SameSite
– Restrange transferul cross-site. Ajuta la mitigarea CSRF (Cross Site Request Forgery)
– Daca SameSite este strict, cookies nu sunt trimise in cereri care nu comunica in cadrul aceluias context
– De exemplu, cookies provenite din good.example.com nu se vor trimite catre bad.example.com
Exemplu Cookies
Tokenuri JWT (JSON Web Tokens)
▪ Informatie codificata intr-un token
▪ Tokenul este semnat pentru integritatea datelor
▪ Nu se trimit automat la fiecare cerere
▪ Folosit in REST Api cu adevarat stateless (*wink wink* microservicii)
▪ Util, in special, pentru mentinerea sesiunii in comunicatii backend-to-
backend sau aplicatii care nu ruleaza in browser (mobile)
▪ Mai scalabil decat server side cookies
– Nu este nevoie de retinerea lui pe backend, pentru ca tokenul este compact si are
toate informatiile pentru state management
Anatomia unui JWT
▪ 3 parti
▪ Header
Functionare JWT
▪ Backendul codifica header-ul si payload-ul in Base64
▪ Codificarea este semnata
– Modul in care se semneaza variaza in functie de algortimul ales: HMAC, RSA, etc…
▪ Clientul salveaza tokenul si il trimite in Authorization Header cand face cereri ulterioare
catre resurse protejate
▪ Backendul verifica integritatea datelor
– Semneaza codificarea Base64 din token
– Verifica daca rezultatul e identic cu semnatura atasata la finalul tokenului