php cakephp cakephp-2.1

Usar Md5 para el hash de contraseñas en el componente Auth de Cakephp 2.x



cakephp-2.1 (2)

No recomiendo el uso de este código en ningún escenario, nunca. MD5 es un algoritmo de hashing horrible para la seguridad, ya que es demasiado ligero como para desalentar el agrietamiento. También tiene vulnerabilidades conocidas. Usa bcrypt o SHA-512.

Para hacer esto, puede editar AppController.php esta manera:

<?php // AppController.php public function beforeFilter() { Security::setHash(''md5''); } ?>

Sin embargo, esto no se recomienda ya que MD5 es un algoritmo de hash de contraseña muy pobre . Es mucho mejor agregar una función para permitir a los usuarios iniciar sesión con las contraseñas md5 existentes, alentándolas a actualizarse al nuevo hash y no permitiendo que ningún usuario nuevo establezca contraseñas MD5.

Si, en cambio, desea utilizar una función segura como bcrypt , puede hacer lo siguiente:

<?php // AppController.php public function beforeFilter() { Security::setHash(''blowfish''); } ?>

Al comparar valores de texto sin formato con hash, debe pasar el hash original como valor de sal para conservar los parámetros de costo, etc.

$newHash = Security::hash($newPassword, ''blowfish'', $storedPassword);

Tengo un sitio web existente, construido usando CakePhp 1.3. En ese sitio web he usado el algoritmo MD5 para el hash de contraseñas.

Ahora quiero actualizar mi versión de CakePhp a 2.3.5, pero no puedo usar MD5 para el hash de contraseña.

Me gustaría saber por qué no puedo usar MD5 en CakePhp 2.x. ?


No use md5 para contraseñas

md5 no es un algoritmo hash apropiado para contraseñas hash, no lo use. Hay muchas, muchas referencias que explican por qué, incluido el manual php :

¿Por qué las funciones de hashing comunes como md5 () y sha1 () no son adecuadas para las contraseñas?

Los algoritmos hash como MD5, SHA1 y SHA256 están diseñados para ser muy rápidos y eficientes. Con las técnicas modernas y el equipo informático, se ha convertido en algo trivial "forzar a la fuerza bruta" la salida de estos algoritmos, con el fin de determinar la entrada original.

Debido a la rapidez con que una computadora moderna puede "revertir" estos algoritmos de hash, muchos profesionales de la seguridad sugieren enfáticamente que no se usen contraseñas.

Cómo cambiar el algoritmo hash predeterminado

Puede cambiar el algoritmo hash predeterminado usando setHash , un algoritmo hash recomendado para contraseñas es blowfish:

Security::setHash(''blowfish'');

Cómo manejar las contraseñas existentes

Si realmente lo desea, puede cambiar setHash para usar md5.

Pero esa no es una buena idea.

No comprometa la seguridad de una aplicación nueva / actualizada solo para acomodar la poca seguridad de la anterior. En lugar de usar el mismo algoritmo hash (y salt) como la aplicación anterior, puede usar lógica como la siguiente (código pseudo-ish):

$username = $this->data[''User''][''username'']; $plainText = $this->data[''User''][''password'']; $user = current($this->User->findByUsername($username)); Security::setHash(''blowfish''); $blowfished = Security::hash($plainText, ''blowfish'', $user[''password'']); if ($blowfished === $user[''password'']) { return true; // user exists, password is correct } $oldSalt = Configure::read(''configure.this''); $md5ed = Security::hash($plainText, ''md5'', $oldSalt); if ($md5ed === $user[''password'']) { $this->User->id = $user[''id'']; $blowfished = Security::hash($plainText); $this->User->saveField(''password'', $blowfished); return true; // user exists, password now updated to blowfish } return false; // user''s password does not exist.

Este tipo de lógica no es compleja y evita la necesidad de continuar utilizando un algoritmo de hash incorrecto.