You are on page 1of 29

TEMA: MANAGEMENTUL

ACȚIUNILOR UTILIZATORILOR
AUTENTIFICAȚI –
AUTORIZAREA ACCESULUI LA
RESURSELE APLICAȚIEI

Autor: N.Pleșca, lector univ.


CONȚINUT

• Securizarea transmisiei de date


• Limitarea accesului utilizatorilor autentificați la funcționalitățile
aplicației web
• Tehnici de bază folosite pentru verificarea că o aplicație nu posedă
vulnerabilități referitoare la accesul la resursele sale
• Autorizarea acțiunilor utilizatorilor
Metode de prevenire a vulnerabilităţilor
legate de managementul sesiunilor
Utilizarea de parole: utilizatorilor ar trebui să le fie limitat numărul de logări pe care le pot încerca într-o anumită
unitate de timp, iar tentativele eşuate de autentificare ar trebui logate (înregistrate), însă parolele introduse nu ar
trebui înregistrate, deoarece acest lucru poate expune parola utilizatorului, oricui reuşeşte să obţină accesul la
loguri. Sistemul, de asemenea nu trebuie să indice motivul pentru care procesul de autentificare nu a reuşit, iar
utilizatorul să fie informat cu privire la data ultimei autentificări reuşite, şi numărul de autentificări nereuşite
Complexitatea parolelor: parolele ar trebui să aibă restricţii care cer un anumit număr de caractere şi de un
anumit nivel de complexitate; de asemenea ar trebui să li se ceară utilizatorilor să îşi schimbe periodic parola şi să
le fie interzis să refolosească o parolă veche
Comenzile de schimbare a parolelor: ar trebui folosit un singur mecanism de schimbare a parolelor indiferent de
circumstanţele în care acest lucru se inâtmplă. Utilizatorul să trebuiască întotdeauna să scrie vechea parolă şi noua
parolă de fiecare dată. Dacă parolele uitate sunt trimise utilizatorului prin e-mail, sistemul ar trebui să-i ceară
utilizatorului să se reautentifice atunci când îşi schimbă adresa de e-mail, altfel un atacator care are acces la token-
ul de sesiune temporar al utilizatorului, poate pur şi simplu să schimbe adresa la care să fie trimisă parola uitata
Stocarea parolelor: toate parolele trebuie ascunse prin utilizarea funcțiilor hash sau păstrate sub formă de hash-
uri, indiferent de locul unde sunt stocate. Este de preferat stocarea sub formă de hash-uri deoarece acestea nu sunt
reversibile
Protejarea ID-ului de sesiune: în mod ideal, întreaga sesiune a utilizatorului ar trebui protejată prin SSL (în acest
mod cookie-ul de sesiune nu ar putea fi furat)
Transferul securizat al datelor
■ Atunci când într-o aplicație web se implementează
sistemul de autentificare, bazat pe formulare, se
recomandă protejarea paginii de intrare (sau cel mai
bine a întregii aplicații) cu ajutorul SSL (Secure
Sockets Layer), pentru a preîntâmpina accesarea de
altcineva a credențialelor de intrare în aplicație
– Certificatele de securitate – reprezintă un cod
electronic unic, care este folosit pentru
verificarea identității site-ului web sau a unui
utilizator
Legături securizate cu serverul
■ Hyper Text Transfer Protocol Secure (HTTPS) – este un protocol (versiunea
securizată a protocolului HTTP), în baza căruia datele sunt transferate între client și
server. Litera «S» de la sfârșitul HTTPS semnifică «securizat»
■ Utilizarea acestui protocol presupune că toate mesajele dintre browser și server vor fi
criptate. HTTPS se folosește adesea pentru a proteja tranzacțiile on-line confidențiale,
precum cele din online-banking sau transferul datelor din formularele de comenzi,
din magazinele online
■ Browserele web precum Internet Explorer, Firefox și Chrome, prezintă o insignă
specială în bara de adrese atunci când legătura cu serverul web este securizată
■ Soluția pentru legăturile securizate ar fi cumpărarea certificatelor SSL (în Moldova -
https://host.md/ru/?pag=ssl) – costul aproximativ 20-450$
■ https://mail.yandex.ru/
■ http://fmi.usm.md/
HTTPS
■ Paginile bazate pe HTTPS utilizează unul din două
protocoale de criptare a mesajelor - SSL (Secure Sockets
Layer) sau TLS (Transport Layer Security). Protocoalele
TLS și SSL folosesc așa numita infrastructură
”asimetrică” care are la bază criptarea bazată pe chei
publice (PKI)
■ Acest sistem asimetric utilizează 2 chei pentru criptarea
mesajelor transmise – cheia publică și cheia privată. Toate
mesajele criptate cu cheia publică pot fi decripate doar cu
cheia secretă și invers
■ Cum ar fi logic, cheia secretă trebuie să fie protejată și
trebuie să fie accesibilă doar posesorului ei. În cazul
aplicațiilor web cu certificat SSL, cheia secretă este
salvată și păzită pe serverul web, iar cheia publică este
distribuită tuturor clienților, care ar trebui să poată
decripta mesajele criptate cu cheia secretă
Legătura HTTPS
■ Atunci când utilizatorul accesează o legătură HTTPS cu o pagină web, site-ul
web mai întîi va expedia certificatul său SSL în browserul clientului. Acest
certificat conține cheia deschisă, necesară lansării sesiunii protejate. În baza
acestui schimb inițial, browserul și site-ul web aflat pe server, inițiază
”strângerea de mână SSL”. Această ”strângere de mână” SSL include în sine
crearea secretelor comune, cu scopul stabilirii unei legături unice, securizate între
client și server
■ Atunci când în timpul legăturii HTTPS este utilizat un certificat SSL sigur,
utilizatorul va vedea în linia de adresă a browserului simbolul de securizare a
legăturii
■ Iar atunci când un site web dispune de un certificat de verificare extinsă, bara de
adrese va deveni verde
Protocolul SSL
Protocolul SSL (utilizat în certificatul SSL) a fost creat cu scopul
soluționării problemelor de securizare a procesului de transmitere a
datelor dintre client și server:
■ Utilizatorii, dar și serverul, trebuie să fie siguri că schimbă date nu
cu utilizatori falși, dar cu acei clienți cu care intenționează să
schimbe date, utilizând mecanisme suplimentare de securizare,
înafară de parole sigure
■ După stabilirea legăturii dintre server și client, tot fluxul
informațional dintre ei trebuie să fie securizat împotriva accesului
nesancționat
■ În timpul schimbului de date părțile implicate trebuie să fie sigure că
nimeni, întâmplîtor sau intenționat, nu se va implica în procesul de
transmisie de date
Suplimentar:
https://www.websecurity.symantec.com/security-topics/what-is-ssl-tls-https
Avantajele implementării certificatului SSL
■ Toate mesajele expediate prin intermediul unei legături HTTP, sunt în format textual
obișnuit (dacă nu au fost supuse criptării prin softuri speciale) și pot fi accesate de
un haker care reușește să spargă conexiunea dintre client și server. Acest fapt
reprezintă un pericol, atunci când ”mesajul” este un formular de comandă și conține
date de card sau IDNP-ul
■ Datorită legăturii HTTPS toate mesajele sunt criptate și sunt securizate. Aceasta
presupune că chiar dacă cineva reușește să intervină nesancționat în timpul
transmisiei – el nu va putea decripta informația, neavând cheia de acces. Astfel:
– Informația despre client, cum ar fi numărul cardului, este criptată și nu poate fi
preluată
– Vizitatorii site-ului pot înțelege că site-ul are un domen securizat
– Clienții au încredere și mai des fac cumpărături pe site-urile care utilizează protocolul
HTTPS
Metode de realizare a autorizării
Implementând autorizarea este necesar să se definească drepturile de acces la resursele
informaționale
■ Drepturile de acces reprezintă o mulțime de reguli care reglementează ordinea și
condițiile de acces la obiectele sistemului informatic (informații, date, procese și alte
resurse), reguli stabilite de documentația tehnică necesară sau de proprietarul
informațiilor
■ Drepturile de acces definesc o mulțime de acțiuni posibile (de exemplu citire date,
înscrieri, editare) permise diferitor subiecți (ca de exemplu utilizatorilor sistemului)
asupra obiectelor cu date
■ Pentru implementarea acestui fapt este necesar un sistem care va oferi diferitor
subiecți diferite drepturi de acces la obiecte. Acest sistem va defini clar drepturile de
acces ale utilizatorilor la resursele sistemului, și va reprezenta mecanismul de bază ce
va realiza securizarea accesului la datele sistemului sau chiar va impiedica distrugerea
acestuia
Roluri și privilegii ale utilizatorilor
■ Vulnerabilitățile autorizării pot apărea oriunde în aplicație sau sistem și țin de
controlul acțiunilor în cazul în care cineva încearcă ilegal să intre în sistem și să
acceseze o resursă, la care el nu trebuie să aibă acces - resurse la care au acces
doar utilizatori autentificați sau care au anumite privilegii de accesare a aplicației
■ Din acest motiv, înaintea implementării sistemului de autorizare a acțiunilor
utilizatorilor, trebuie clar definite rolurile și privilegiile oferite fiecărui rol –
accesul la resursele aplicației în baza rolurilor și privilegiilor utilizatorilor
■ Drepturile de acces ale subiecților sistemului, asupra obiectelor aplicației, se
grupează, ținându-se cont de specificul realizării acestora, formând astfel roluri
■ Formarea rolurilor pentru utilizatori determină definirea clară a acțiunilor acestora
în accesarea sistemului
Exemplu de aplicație cu trei tipuri de utilizatori și cu
diferite drepturi de acces la resurse
Completez BD, adăugând rolurile și
drepturile de acces (versiune simplificată –
când se cunosc funcționalitățile)
În script adaug sesiunile și definesc
variabile de sesiune necesare
if (($login_err + $parola_err) == 0) {
$query = "SELECT users.*, roluri.produs_acces, roluri.users_acces, roluri.roles_acces, roluri.denumire_rol FROM users left join
roluri on users.id_rol =roluri.id_rol WHERE login='$login' AND password='$parola' AND este_activ=1";
$res = mysqli_query($conn, $query);
if($row=mysqli_fetch_array($res)) {
$_SESSION['id_user'] = $row['id_user'];
$_SESSION['id_rol'] = $row['id_rol'];
$_SESSION['roluri_produs_acces'] = $row['produs_acces'];
$_SESSION['roluri_users_acces'] = $row['users_acces'];
$_SESSION['roluri_roles_acces'] = $row['roles_acces'];
$_SESSION['denumire_rol'] = $row['denumire_rol'];
header('Location: http://'.$_SERVER['SERVER_NAME'].$cale.'meniu.php');
} else {
header('Location: http://'.$_SERVER['SERVER_NAME'].$cale);
}
}
La încercarea accesării spațiului ”închis”
implementez autentificarea utilizatorului
<?php
session_start();
require 'config.php';
if(!$_SESSION['id_user']) {
header('Location: http://'.
$_SERVER['SERVER_NAME'].$cale);
}
?>

În cazul încercării ”ocolirii autentificării” și


încercării accesării paginii spațiului închis – nu voi
reuși
Verific variabilele de sesiune pentru a ști
ce opțiuni funcționale să i le afișez
utilizatorului – în funcție de rolul acestuia
■ Mai întâi voi verifica dacă nu cumva încearcă să intre în spațiul închis un utilizator ce are cont,
dar nu are drept de acces (ere id-ul permisiunii - 1)
if (($_SESSION['roluri_produs_acces']==1) and ($_SESSION['roluri_users_acces']==1) and
($_SESSION['roluri_roles_acces']==1)) {
echo '<h3>'.$_SESSION['denumire_rol'].', nu aveti acces la nici o functionalitate!</h3>';
} else {...

■ Iar apoi verific dreptul de acces și afișez opțiunile accesibile rolului


switch ($_SESSION['roluri_produs_acces']) {
case 2: ?><a href="functionalitati/vizualizare_prod.php">Vizualizeaza date produse</a><br /><?php break;
case 3: ?><h3 class="w3-container w3-card-8 w3-padding-8 w3-green w3-large w3-text-white w3-opacity">Editeaza date
produse</h3><br /><a href="functionalitati/vizualizare_prod.php">Vizualizeaza date produse</a><br />
<a href="#">Adauga detalii un nou produs</a><br /><a href="#">Sterge date produs</a><br /> <?php break; }
switch ($_SESSION['roluri_users_acces']) {
case 2: ?><a href="#">Vizualizeaza date permisiuni</a><br /><?php break;
case 3: ?><h3 class="w3-container w3-card-8 w3-padding-8 w3-green w3-large w3-text-white w3-opacity">Editeaza date
permisiuni</h3><br /><a href="functionalitati/vizualizare_permis.php">Vizualizeaza date permisiuni</a><br />
<a href="#">Adauga o noua permisiune</a><br /><a href="#">Sterge permisiune</a><br /><?php break; }
switch ($_SESSION['roluri_roles_acces']) {
case 2: ?><a href="#">Vizualizeaza date conturi</a><br /><?php break;
case 3: ?><h3 class="w3-container w3-card-8 w3-padding-8 w3-green w3-large w3-text-white w3-opacity">Editeaza date
conturi</h3><br />
<a href="functionalitati/vizualizare_cont.php">Vizualizeaza date conturi</a><br />
<a href="#">Adauga un nou cont</a><br /><a href="#">Sterge cont</a><br /><?php break; }

Observație: Soluția este aplicabilă când din start sunt cunoscute funcționalitățile!
Rezultatul verificării utilizatorului cu rolul
”Vânzător”
Rezultatul verificării utilizatorului cu
rolul ”Manager”
Rezultatul verificării utilizatorului cu
rolul ”Administrator”
Realizarea autorizării
■ La intrarea în fiecare funcție – de
asemenea se recomandă verificarea
rolului și a dreptului de acces,
folosind variabilele de sesiune
definite anterior
■ Eu am realizat funcționalitatea
”vizualizare date produse” care este
accesibilă rolurilor vanzător,
manager și adminstrator, adică cei
cu dreptul de acces 2 sau 3
Inițial verific, dacă utilizatorul care încearcă să
acceseze funcționalitatea de vizualizare este
autentificat și are dreptul de a o accesa
session_start();
require '../config.php';
if(!$_SESSION['id_user']) { header('Location: http://'.$_SERVER['SERVER_NAME'].
$cale.'meniu.php');}
if(!(($_SESSION['roluri_produs_acces']==2)or($_SESSION['roluri_produs_acces']==3))) {
header('Location: http://'.$_SERVER['SERVER_NAME'].$cale.'meniu.php');
}
Intrarea pe această pagină făra autentificare
(ocolirea ei) – nu este posibilă
Afișez datele
<h3>Activitate placuta, <?php echo $_SESSION['denumire_rol']; ?>ule!</h3>
<div class="w3-container w3-xlarge w3-padding-8 w3-right w3-text-green w3-card-16 w3-yellow w3-hover-green"><a
href="../meniu.php">Iesire</a></div>
<h3>Vizualizezi continutul tabelului "produse"...</h3>
<?php require '../connection.php’;
$sqlQwer=mysqli_query($conn, "SELECT denumire, descriere, pret_unitar, imagine FROM produse");
if ($sqlQwer) {
echo '<div class="date_form w3-container w3-border w3-round-xlarge w3-card-8 w3-hover-border-green"><table>';
while($rows=mysqli_fetch_array($sqlQwer)){
echo '<tr>';
echo '<td class="w3-border w3-padding-16"><img width="55" height="47" border="1" src="'.$rows['imagine'].'"</td>';
echo '<td class="w3-border w3-padding-16">'.$rows['denumire']." - ".$rows['pret_unitar']." lei</td>";
echo '<td class="w3-border w3-padding-16">'.$rows['descriere']."</td>";
echo '</tr>';
}
mysqli_close($conn);
echo '</table></div>';
}
?>
Afișarea datelor pentru vizualizare
Iesirea din orice regim
■ Nu uitați la ”ieșirea” utilizatorului să distrugeți sesiunea:
session_start();
session_destroy();
header('Location: http://'.$_SERVER['SERVER_NAME'].$cale);
■ Dacă este prevăzută ieșirea la nivelul anterior, de unde a intrat utilizatorul –
se va realiza sub forma unei referințe obișnuite – doar în pagina aceea se
verifică iar rolul, accesul ... Și nu trebuie distrusă sesiunea curenta
Concluzii
■ Implementând corect principiile folosirii sesiunilor, realizând corect autentificarea și autorizarea
utilizatorului, vom garanta utilizarea corectă a aplicației web și ocolirea vulnerabilității ”Ocolirea
(întreruperea) controlului accesului” și a vulnerabilității ”Identificare și autentificare incorectă” din ”top
10 Vulnerabilități” conform OWASP
– Prezența vulnerabilităților în mecanismele de verificare a ID-ului de utilizator - vizează ocolirea
sistemului de autentificare
– Autentificarea insuficientă - apare atunci când serverul permite accesul la informații sau funcții
importante fără o autentificare adecvată
– Restabilirea necorespunzătoare a parolei - serverul web permite să recuperați, să modificați sau să primiți
parolele ale altor utilizatori, neautorizați
– Autorizarea este necesară pentru a determina nivelul permisiunilor utilizatorilor, care vor să acceseze
resursele aplicației. Atacurile sunt efectuate pentru a avea acces la un conținut sau funcționalități
ascunse

Suplimentar: A01 Broken Access Control - OWASP Top 10:2021


A02 Cryptographic Failures - OWASP Top 10:2021,
A07 Identification and Authentication Failures - OWASP Top 10:2021
Concluzii. Metode de protejare ale site-
ului/ aplicației web
■ Parole sigure. Pentru generarea și păstrarea parolelor pot fi utilizate programe
de management a parolelor speciale. Parolele nu trebuie păstrate în fișiere
simple pe calculator, în browsere sau programe-client FTP. Parolele trebuie
schimbate cu regularitate
■ Limitarea accesului. Numărul persoanelor care au acces la panoul de
administrare a unei aplicații web trebuie să fie foarte limitat
■ Software-ul de pe server. Este bine să fie reînnoit cu regularitate deoarece
foarte multe atacuri se produc prin intermediul vulnerabilităților apărute din
cauza softului învechit
■ HTTPS. Dacă site-ul/ aplicația permite recepționarea plăților sau recepționează
și transmite date de la utilizator, se recomandă utilizarea unui protocol securizat
de criptare al datelor
Concluzii

You might also like

  • Laborator nr5 PSI
    Laborator nr5 PSI
    Document8 pages
    Laborator nr5 PSI
    Valeria Moraru
    No ratings yet
  • TEMA12
    TEMA12
    Document26 pages
    TEMA12
    Valeria Moraru
    No ratings yet
  • Trei
    Trei
    Document26 pages
    Trei
    Valeria Moraru
    No ratings yet
  • Trei
    Trei
    Document29 pages
    Trei
    Valeria Moraru
    No ratings yet
  • Trei
    Trei
    Document26 pages
    Trei
    Valeria Moraru
    No ratings yet
  • Trei
    Trei
    Document5 pages
    Trei
    Valeria Moraru
    No ratings yet
  • Teste 1 Programare Paralela Rom 2022 2023 FR
    Teste 1 Programare Paralela Rom 2022 2023 FR
    Document2 pages
    Teste 1 Programare Paralela Rom 2022 2023 FR
    Valeria Moraru
    No ratings yet
  • Trei
    Trei
    Document40 pages
    Trei
    Valeria Moraru
    No ratings yet
  • Trei
    Trei
    Document15 pages
    Trei
    Valeria Moraru
    No ratings yet
  • Trei
    Trei
    Document17 pages
    Trei
    Valeria Moraru
    No ratings yet
  • Inele: Capitolul III
    Inele: Capitolul III
    Document95 pages
    Inele: Capitolul III
    Valeria Moraru
    No ratings yet
  • Examen PP
    Examen PP
    Document4 pages
    Examen PP
    Valeria Moraru
    No ratings yet