Quitar hash en componente Auth

376 views
Skip to first unread message

Nefastofeles

unread,
May 1, 2009, 4:05:20 PM5/1/09
to CakePHP en Español
Siguiendo el tutorial del Libro de cakephp hice funcionar el tema de
las sesiones y permisos con el componente Auth, pero me tope con un
problema el tema de los passwords, que por defecto cake los maneja con
sha1 esto se puede cambiar facilmente con

Security::setHash('md5');

Ahora el meollo del asunto es que para esto necesito que el campo
password de la base de datos tiene que estar tambien "codifica" en
sha1 o md5.

Entonces si tengo usuarios y quieran cambiar sus contraseñas estas se
envian (al formulario) asi codificadas y si los envian asi puede
pasar:
1. que se conserve el password en ese caso este campo no es necesario
"codificarlo".
2. si se cambia el password este tiene que se codificado.

Entonces las soluciones que se presentan son las siguientes;

1. enviar los campos de password vacios pero ahora ya tambien el
administrador no sabiar cual era el password, entonces necesariamente
tendria que cambiarse.
2. Deshabilitar la "codificacion"

Esta me parece la mejor, pero alguien sabria como hacer esto??

ya intente esto en el archivo core

//Configure::write('Security.salt', '');

pero nada...

de antemano muchas gracias...

José Lorenzo

unread,
May 2, 2009, 5:05:37 PM5/2/09
to cakep...@googlegroups.com
Aún no entiendo el proposito de deshabilitar el hash. ¿Qué quieres lograr?

2009/5/2 Nefastofeles <howar.r...@gmail.com>

Luis Leiva

unread,
May 2, 2009, 6:46:53 PM5/2/09
to cakep...@googlegroups.com
quiere que los campos no se guarden encriptados, sino con sus valores originales, para reenviarlos cuando sea olvidada la contraseña. A opinion inicial pienso q es bastante inseguro estom pues cualquier listillo q haga una inyeccion de codigo haciendo un select * from <tabla_usuario>, puede acceder directamente a todas las contraseñas del sistema.
 
Pero bueno, en la ruta \cake\libs\security.php busca este codigo en la linea 104:
 /**
 * Create a hash from string using given method.
 * Fallback on next available method.
 *
 * @param string $string String to hash
 * @param string $type Method to use (sha1/sha256/md5)
 * @param boolean $salt If true, automatically appends the application's salt
 *       value to $string (Security.salt)
 * @return string Hash
 * @access public
 * @static
 */
 function hash($string, $type = null, $salt = false) {
  $_this =& Security::getInstance();
  if ($salt) {
   if (is_string($salt)) {
    $string = $salt . $string;
   } else {
    $string = Configure::read('Security.salt') . $string;
   }
  }
  if (empty($type)) {
   $type = $_this->hashType;
  }
  $type = strtolower($type);
  if ($type == 'sha1' || $type == null) {
   if (function_exists('sha1')) {
    $return = sha1($string);
    return $return;
   }
   $type = 'sha256';
  }
  if ($type == 'sha256' && function_exists('mhash')) {
   return bin2hex(mhash(MHASH_SHA256, $string));
  }
  if (function_exists('hash')) {
   return hash($type, $string);
  }
  return md5($string);
 }
 y comentas todo, añadiendo al final el mismo texto de entrada, osea algo como esto:
 
/**
 * Create a hash from string using given method.
 * Fallback on next available method.
 *
 * @param string $string String to hash
 * @param string $type Method to use (sha1/sha256/md5)
 * @param boolean $salt If true, automatically appends the application's salt
 *       value to $string (Security.salt)
 * @return string Hash
 * @access public
 * @static
 */
 function hash($string, $type = null, $salt = false) {
  /*$_this =& Security::getInstance();
  if ($salt) {
   if (is_string($salt)) {
    $string = $salt . $string;
   } else {
    $string = Configure::read('Security.salt') . $string;
   }
  }
  if (empty($type)) {
   $type = $_this->hashType;
  }
  $type = strtolower($type);
  if ($type == 'sha1' || $type == null) {
   if (function_exists('sha1')) {
    $return = sha1($string);
    return $return;
   }
   $type = 'sha256';
  }
  if ($type == 'sha256' && function_exists('mhash')) {
   return bin2hex(mhash(MHASH_SHA256, $string));
  }
  if (function_exists('hash')) {
   return hash($type, $string);
  }
  return md5($string);*/
return $string;
 }
 con eso cada vez q la aplicacion quiera convertir un texto a MD5, SHA-1 o cualquier algoritmo de encriptacion, simplemente no lo hara y devolvera la misma cadena enviada.

danilo04

unread,
May 3, 2009, 9:29:55 PM5/3/09
to CakePHP en Español
Yo te recomiendo que guardes el password cifrado, pero que cuando
quieran recuperar la contraseña generes una aleatoria y se la mandes
al email.

Puedes ver el código que utilizan en bakery (https://cakeforge.org/
plugins/scmsvn/viewcvs.php/trunk/?rev=723&root=bakery#dirlist) para el
envío de nuevas contraseñas. Prácticamente el proceso consiste en dos
pasos:
- Primero escribes tu email para requerir reiniciar tu contraseña. El
sistema te manda un email con un token de autenticación para verificar
que no sea spam o algo por el estilo.
- Posteriormente accedes a la url que te mandaron en el email y un
nuevo email se enviará a tu cuenta con el nuevo password generado.

En el código de bakery puedes ver users_controller.php, el modelo
user.php y las vistas reset.ctp de users.
> El 2 de mayo de 2009 14:05, José Lorenzo <jose....@gmail.com> escribió:
>
> > Aún no entiendo el proposito de deshabilitar el hash. ¿Qué quieres lograr?
>
> > 2009/5/2 Nefastofeles <howar.rasgu...@gmail.com>

JmN

unread,
May 4, 2009, 7:44:55 AM5/4/09
to CakePHP en Español
Deshabilitar el hash no creo que sea la mejor opcion.

Lo mas simple es que uses otro nombre para el campo de la contraseña
en tus formularios (que estaran vacios) y si hay algo escrito lo
guardas (seteas ese valor a $this->data['Loquesea']['password'] y el
resto se hace solo en el save()) y sino no lo seteas y el password no
cambia...

Joaquin Windmüller

unread,
May 4, 2009, 9:11:17 AM5/4/09
to cakep...@googlegroups.com
Nefastofeles, te recomiendo leer este PDF http://www.fishnetsecurity.com/sites/com.fishnetsecurity/downloads/Forgot_Password_Best_Practices_v1.0.pdf

Asi lo implemenatamos en Osmosis, puedes ver el codigo tmb: http://thechaw.com/osmosis

2009/5/4 JmN <jmn...@gmail.com>
Reply all
Reply to author
Forward
0 new messages