2011-02-25 14 views
6

Necesito criptar y descifrar de forma segura la información sobre los usuarios (user_id y password) en las cookies.cifrado y descifrado de la información almacenada en las cookies

¿Cuál es la mejor manera de hacerlo? ¿Qué funciones de cifrado y descifrado necesito?

Estoy usando PHP y MySQL y el ejemplo será participado?

+2

No se recomienda guardar la contraseña en una cookie –

+0

¿Por qué * necesita * almacenar contraseñas de usuario en una cookie? –

+0

porque los datos POST se pueden olfatear, así que pensé que usar cookies con encriptación para enviar credenciales de inicio de sesión sería mejor ¿qué sugieres? –

Respuesta

8

No almacenar contraseñas en una galleta. Nunca hagas este tipo de cosas. Si desea que su usuario no tenga que ingresar su nombre de usuario y contraseña para iniciar sesión, puede genratear un token aleatorio cuando inicie sesión (sha1(mt_rand()) por ejemplo) y almacene este valor en la cookie y la base de datos.

Luego, al tratar de identificar a un usuario, solo tiene que verificar si el valor encontrado en su cookie se puede encontrar en su base de datos. Genere un nuevo valor cada vez que inicie sesión (usando nombre + contraseña o con esta cookie).

10

por ejemplo

Set encrypted cookie: 
<?php 

$time = time()+60*60*24*30*12; //store cookie for one year 
setcookie('cookie_name', encryptCookie('cookie_value'),$time,'/'); 

?> 

Get encrypted cookie value: 

<?php 

$cookie_value = decryptCookie($_COOKIE['cookie_name']); 

?> 

aquí es la función para cifrar descifrar cookie:

<?php 

function encryptCookie($value){ 
    if(!$value){return false;} 
    $key = 'The Line Secret Key'; 
    $text = $value; 
    $iv_size = mcrypt_get_iv_size(MCRYPT_RIJNDAEL_256, MCRYPT_MODE_ECB); 
    $iv = mcrypt_create_iv($iv_size, MCRYPT_RAND); 
    $crypttext = mcrypt_encrypt(MCRYPT_RIJNDAEL_256, $key, $text, MCRYPT_MODE_ECB, $iv); 
    return trim(base64_encode($crypttext)); //encode for cookie 
} 

function decryptCookie($value){ 
    if(!$value){return false;} 
    $key = 'The Line Secret Key'; 
    $crypttext = base64_decode($value); //decode cookie 
    $iv_size = mcrypt_get_iv_size(MCRYPT_RIJNDAEL_256, MCRYPT_MODE_ECB); 
    $iv = mcrypt_create_iv($iv_size, MCRYPT_RAND); 
    $decrypttext = mcrypt_decrypt(MCRYPT_RIJNDAEL_256, $key, $crypttext, MCRYPT_MODE_ECB, $iv); 
    return trim($decrypttext); 
} 

?> 

Puede leer más sobre la función mcrypt aquí: php mcrypt function

+0

¿Podría definir la función 'encryptCookie()'? –

+3

@Michiel: estaría mucho más interesado en descifrarCookie() si va a usar MD5. –

+0

lo siento, fue un poco rápido allí. He agregado los ejemplos de encriptar/descifrar ahora – Mikelangelo

1

No hay una buena manera de "cifrar y descifrar de forma segura la información sobre los usuarios en las cookies" porque el almacenamiento de esa información en las cookies es intrínsecamente inseguro.

La técnica recomendada es generar un identificador de sesión aleatorio y usarlo como el única información de almacenada en las cookies. Esta identificación de sesión se usa en el servidor para buscar la información de la cuenta real del usuario (y cualquier estado con respecto a lo que están haciendo) en una base de datos o archivo para que solo envíe una pequeña cantidad de datos que de otra manera carecerían de sentido adelante a través de la red con cada solicitud hecha por el usuario. Si tal tipo de cookie es interceptada por The Bad Guys, solo comprometerá la sesión del usuario (permitiendo al atacante suplantar temporalmente al usuario hasta que finalice la sesión); la contraseña del usuario seguirá siendo segura porque no está en la cookie y (presumiblemente) no se muestra en ninguna página de la aplicación.

Cuestiones relacionadas