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.";
}
?>