Securitatea Bazelor de Date
PHP Manual

Model de stocare criptată

SSL/SSH protejează traversarea datelor de la client la server, însă SSL/SSH nu protejează datele stocate în baza de date. SSL este un protocol de tranzit.

Odată ce atacatorul capătă acces la baza de date direct (evitând serverul web), informația stocată poate fi expusă sau abuzată, dacă ea nu este protejată de însăși baza de date. Criptarea datelor este o bună masură pentru a diminua acest risc, însă prea puține baze de date oferă acest tip de criptare.

Cea mai ușoară cale de a rezolva problema este de a crea propriul pachet de criptare, și apoi folosirea lui cu scripturile PHP. PHP vă poate ajuta în aceasta prin intermediul câtorva extensii, cum ar fi Mcrypt și Mhash, care acoperă o varietate largă de algoritmi de criptare. Scriptul criptează datele înainte de a fi inserate în baza de date, și le decriptează la extragerea acestora. Verificați documentația de rigoare pentru a studia mai multe despre modalitățile de operare ale criptării.

În cazul datelor care trebuie să fie confidențiale, a căror expunere nu este necesară în nici un context, procedeul hashing poate fi luat în considerare. Cel mai cunoscut exemplu este stocarea hash-ului MD5 al unei parole în baza de date, în loc de stocarea parolei înseși. Vedeți de asemenea și funcțiile crypt() și md5().

Example #1 Utilizarea hash-ului pentru parole

<?php

// stocăm hash-ul parolei --> md5($password)
$query  sprintf("INSERT INTO users(name,pwd) VALUES('%s','%s');",
            
pg_escape_string($username), md5($password));
$result pg_query($connection$query);

// query - verificare dacă utilizatorul a introdus parola corectă
$query sprintf("SELECT 1 FROM users WHERE name='%s' AND pwd='%s';",
            
pg_escape_string($username), md5($password));
$result pg_query($connection$query);

if (
pg_num_rows($result) > 0) {
    echo 
'Bine ai venit, $username!';
} else {
    echo 
'Autentificarea a eșuat pentru $username.';
}

?>

Securitatea Bazelor de Date
PHP Manual