PHP - Almacenar contraseña hasheada con PHP

 
Vista:

Almacenar contraseña hasheada con PHP

Publicado por Pablo (2 intervenciones) el 07/05/2019 11:03:35
Buenas, estoy creando los formularios de login y registro para una web. Actualmente, cuando un usuario se registra,
con php creo una instancia de mi clase usuario (cuyos campos coinciden con los de la tabla homónima). Usando PDO y fetchObject. De modo que ya tengo todos sus datos y puedo modificarlos y actualizar la base de datos desde el propio objeto.

Mi duda es en lo relativo a la contraseña, no sé si es peligroso hacerlo de este modo, ya que la contraseña es uno de los campos que descargo desde la tabla y almaceno en el objeto de php. En caso de que no sea buena idea, ¿hay alguna manera de hacer el fetchObject omitiendo dicho campo? O tal vez sería mejor eliminar dicho campo directamente de mi estructura de objetos y gestionar lo relativo a la contrseña de otra manera?

La contraseña que descargo de la base de datos ya tiene la seguridad aplicada (no es un texto plano tal cual lo introdujo el usuario) Aun así, imagino que puede ser una vulnerabilidad?.

Gracias.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Kevin
Val: 87
Ha aumentado su posición en 3 puestos en PHP (en relación al último mes)
Gráfica de PHP

Almacenar contraseña hasheada con PHP

Publicado por Kevin (14 intervenciones) el 07/05/2019 14:17:56
Saludos, Pablo.

La manera más segura de manejar las contraseñas es encriptarlas, ya que es un dato importante.
Sería lo ideal que solamente el usuario pueda saberla y que tú la manejes encriptada desde la BBDD.

Te dejo un ejemplo sobre como encriptar la contraseña, y como compararla para darle acceso al usuario:

1
2
3
4
5
6
7
8
9
public function encriptaPassword($contra){
 
    $cantidad = 15;//El total de caracteres en el que se convertirá la password encriptada.
 
    $contra = password_hash($contra, PASSWORD_DEFAULT, ["cost" => $cantidad]);//Se encripta la contraseña.
 
    return $contra;//Se devuelve la contraseña encriptada.
 
}//Fin de la función de encriptar la contraseña.

Esa función lo que hace es encriptar la contraseña.
Ahora necesitamos verificar que la contraseña que el usuario ingresó, coincida con la que ya se encuentra almacenada en nuestra BBDD.
Sería algo así:

1
2
3
4
5
public function verificaPassword($contra_ingresada,$contra_encriptada){
 
    return password_verify($contra_ingresada,$contra_encriptada);//Se verifica la contraseña que se ingresó con la que esta encriptada.
 
}//Fin de la funcion de verificar las contraseñas.

Te dejo los links de la documentación de las funciones para que, si quieres, les des un vistazo:

Encriptación ---> https://php.net/manual/es/function.password-hash.php

Verificación ---> https://www.php.net/manual/es/function.password-verify.php

¡Un saludo!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
3
Comentar