Seguridad de Bases de Datos
PHP Manual

Modelo de Almacenamiento Encriptado

SSL/SSH protege los datos que viajan desde el cliente al servidor, SSL/SSH no protege los datos persistentes almacenados en la base de datos. SSL es un protocolo sobre-el-cable.

Una vez el atacante adquiere acceso directo a su base de datos (evitando el paso por el servidor web), los datos críticos almacenados pueden estar expuestos o malutilizados, a menos que la información esté protegida en la base de datos misma. La encripción de datos es una buena forma de mitigar esta amenaza, pero muy pocas bases de datos ofrecen este tipo de mecanismo de encripción de datos.

La forma más sencilla de evitar este problema es crear primero su propio paquete de encripción, y luego utilizarlo desde sus scripts de PHP. PHP puede ayudarle en este sentido con varias extensiones, como Mcrypt y Mhash, las cuales cubren una amplia variedad de algoritmos de encripción. El script encripta los datos antes de insertarlos en la base de datos, y los decripta cuando los recupera. Vea las referencias para consultar más ejemplos de cómo opera la encripción.

En el caso de datos realmente escondidos, si su representación original no se necesita (es decir, no debe ser desplegada), los resúmenes criptográficos pueden llegar a considerarse también. El ejemplo clásico de gestión de resúmenes criptogáficos es el almacenamiento de secuencias MD5 de una contraseña en una base de datos, en lugar de la contraseña misma. Vea también crypt() y md5().

Example#1 Uso de un campo de contraseñas encriptado

<?php

// almacenamiento de resumen criptográfico de la contraseña
$consulta  sprintf("INSERT INTO usuarios(nombre,contr) VALUES('%s','%s');",
                     
pg_escape_string($nombre_usuario), md5($contrasenya));
$resultado pg_query($conexion$consulta);


// consulta de verificación de la contraseña enviada
$consulta  sprintf("SELECT 1 FROM usuarios WHERE nombre='%s' AND contr='%s';",
                     
pg_escape_string($nombre_usuario), md5($contrasenya));
$resultado pg_query($conexion$consulta);

if (
pg_num_rows($resultado) > 0) {
    echo 
'¡Bienvenido, $nombre_usuario!';
}
else {
    echo 
'No pudo autenticarse a $nombre_usuario.';
}

?>

Seguridad de Bases de Datos
PHP Manual