Cómo guardar el sal aleatorio en la base de datos

2

Tal como lo entiendo, las contraseñas de salado y hash son el camino a seguir. También entiendo que para autenticar una contraseña con sal y hash, es necesario guardar la sal aleatoria. ¿Significa esto que si uso el siguiente código para procesar la contraseña:

$blowfish_salt = bin2hex(openssl_random_pseudo_bytes(22));  
$hash = crypt($data, "$2a$12$".$blowfish_salt);  

entonces necesitaría crear una columna en mi tabla de usuarios que tenga el valor de $blowfish_salt?

Estoy en lo correcto al pensar que

  1. ¿El código anterior debe incluirse en el PHP que procesa el formulario de registro?
  2. ¿El formulario de procesamiento debe enviar el valor en $ blowfish_salt a la tabla que se almacenará junto a la contraseña?
  3. La sal se almacena como está, ¿no es necesario procesarla / ocultarla?
  4. En el momento de la autenticación, ¿cómo se generó la sal en primer lugar no es necesario saberlo?
  5. Si, por alguna coincidencia, dos usuarios seleccionan la misma contraseña, el valor almacenado con sal y hash hará que eso sea irrelevante.
    ¿Cómo utilizará el código de autenticación el salt? ¿Hay un código específico para esto?

También encontré el siguiente código en un tutorial como un método para prevenir la inyección de SQL:

//this function is to guard against sql injection

function prevent($this) {  
 $this = stripslashes($this);  
 $this = mysql_real_escape_string($this);  
 return $this;    
}

//the prevent() can be used like this on form fields to prevent sql injection  
prevent($username);  
prevent($password);  

¿Debo usar esto si estoy saltando la contraseña en el formulario de registro? ¿No se codificaría ningún código malicioso en el proceso? ¿O me estoy perdiendo algo?

    
pregunta vinaya 24.07.2013 - 13:13
fuente

1 respuesta

0

Estás sal se guarda en el hash generado por tu función crypt() . Para verificar la contraseña, todo lo que necesita hacer es:

$res = crypt($password, $hash);

$res devolverá 1 si la contraseña es correcta.

  1. Debe guardar la contraseña con hash, así que sí.
  2. No, esto ya está contenido en la cadena que generaste (si lo observas bien, puedes ver que el hash está delimitado en varias secciones)
  3. Las sales nunca se consideran secretas, por lo que no es un problema
  4. Consulte 2.
  5. Serán diferentes porque las sales serán diferentes

Su prevención de inyección de SQL no se considera segura, puede encontrar más detalles al respecto aquí inyección SQL que se mueve alrededor de mysql_real_escape_string () en Stackoverflow y sí, siempre debes desinfectar las variables antes de procesarlas. Hay toneladas de recursos disponibles en este sitio web sobre cómo prevenir la inyección de SQL correctamente. En general, no deberías usar las funciones mysql_ en PHP. PHP tiene algunas herramientas agradables que manejan todos estos problemas para usted como MySQLi y PDO. También echa un vistazo a los procedimientos almacenados.

    
respondido por el Lucas Kauffman 24.07.2013 - 13:26
fuente

Lea otras preguntas en las etiquetas