Modelo de Almacenamiento Encriptado

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 encriptaci贸n de datos es una buena forma de mitigar esta amenaza, pero muy pocas bases de datos ofrecen este tipo de mecanismo de encriptaci贸n de datos.

La forma m谩s sencilla de evitar este problema es crear primero su propio paquete de encriptaci贸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 encriptaci贸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 encriptaci贸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 criptogr谩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().

Ejemplo 27-1. Uso de un campo de contrase帽as encriptado

<?php

// almacenamiento de resumen criptografico de la contrasenya
$consulta  = sprintf("INSERT INTO usuarios(nombre,contr) VALUES('%s','%s');",
                     
addslashes($nombre_usuario), md5($contrasenya));
$resultado = pg_query($conexion, $consulta);


// consulta de verificacion de la contrasenya enviada
$consulta  = sprintf("SELECT 1 FROM usuarios WHERE nombre='%s' AND contr='%s';",
                     
addslashes($nombre_usuario), md5($contrasenya));
$resultado = pg_query($conexion, $consulta);

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

?>