Forum und email

Model de stocare criptata

SSL/SSH protejeaza traversarea datelor de la client la server, insa SSL/SSH nu protejeaza datele stocate in baza de date. SSL este un protocol on-the-wire adica are grija numai de informatia ce traverseaza traseul descris mai sus.

Odata ce atacatorul castiga acces la baza de date direct (trecand peste serverul web), informatia stocata poate fi expusa sau abuzata, numai daca ea este protejata de insasi baza de date. Encriptia datelor este o buna masura pentru a diminua acest risc, dar prea putine baze de date oferta acest tip de encriptie.

Cea mai usoara cale de a rezolva problema este de a crea propriul pachet de encriptie, si apoi folosirea lui cu scripturile PHP. PHP poate asigura urmatoarele extensii ca Mcrypt si Mhash, care acopera o varietate larga de algoritmi de encriptie. Scriptul cripteaza datele inainte de a fi inserate in baza de date, si le deripteaza la extragerea acestora. Verificati documentatia de rigoare pentru a studia mai multe despre modalitatile de operare ale encriptiei.

In cazul datelor care trebuie sa fie confidentiale, a caror expunere nu este necesara in nici un context, procedeul hashing poate fi luat in considerare. Cel mai cunoscut exemplu este stocarea hash-ului MD5 a unei parole in baza de date, in loc de stocarea ei in format plain. Vezi de asemenea si functiile crypt() and md5().

Example#1 Utilizarea hash-ului pentru parole

<?php

// stocam hash-ul parolei --> md5($password)
$query  sprintf("INSERT INTO users(name,pwd) VALUES('%s','%s');",
            
addslashes($username), md5($password));
$result pg_exec($connection$query);

// query - verificare daca utilizatorul a introdus parola corecta
$query sprintf("SELECT 1 FROM users WHERE name='%s' AND pwd='%s';",
            
addslashes($username), md5($password));
$result pg_exec($connection$query);

if (
pg_numrows($result) > 0) {
    echo 
"Welcome, $username!";
}
else {
    echo 
"Authentication failed for $username.";
}

?>