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
- ¿El código anterior debe incluirse en el PHP que procesa el formulario de registro?
- ¿El formulario de procesamiento debe enviar el valor en $ blowfish_salt a la tabla que se almacenará junto a la contraseña?
- La sal se almacena como está, ¿no es necesario procesarla / ocultarla?
- En el momento de la autenticación, ¿cómo se generó la sal en primer lugar no es necesario saberlo?
- 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?