Como crear usuarios en PHP con password hasheada

Hola a todos, hoy os voy a explicar como podemos crear usuarios en PHP con la password hasheada con la función password_hash.

En nuestras aplicaciones web, normalmente necesitaremos usuarios y estos necesitarán contraseñas, pero ¿hay alguna forma segura de guardarlas en nuestra base de datos? La respuesta es sí.

Esto lo podemos hacer con password_hash, una función de PHP que nos permite dada una password, encriptándola para protegerla.

Empezaremos por la base de datos, necesitaremos una base de datos con una tabla que tenga al menos dos campos (el nombre puede variar) username y password, ambas serian de tipo varchar pero el campo de password debe ser de 60 caracteres de longitud mínimo, ya que sino nuestra password se cortará y no se podrá después validar con éxito.

Hacemos un formulario para crear un usuario:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Crear usuario</title>
</head>
<body>

    <form action="crear-usuario.php" method="post">
        <label for="username">Username</label>
        <input type="text" name="username" id="username">
        <label for="password">Password</label>
        <input type="password" name="password" id="password">
        <input type="submit" value="Crear usuario">
    </form>

</body>
</html>

Recordemos conectar nuestra base de datos con PHP con un fichero de conexión (conexion.php):


<?php

	define("HOST_DB", "localhost");
	define("USER_DB", "root");
	define("PASS_DB", "");
	define("NAME_DB", "login");

	$conexion = new mysqli(
		constant("HOST_DB"),
		constant("USER_DB"),
		constant("PASS_DB"),
		constant("NAME_DB")
	);

?>

Cuando hagamos click en el botón del formulario, insertaremos el usuario así:


<?php

    require_once 'conexion.php';
    session_start();

    $username = $_POST['username'];
    $password = $_POST['password'];

    $passwordHash = password_hash($password, PASSWORD_DEFAULT);

    $sql = "INSERT INTO login VALUES(";
    $sql .= "'" . $username . "', '" . $passwordHash . "')";

    $conexion->query($sql);

    header("Location: index.php");

?>

Quedémonos con esta línea:

$passwordHash = password_hash($password, PASSWORD_DEFAULT);

Lo que hacemos es obtener el password hasheada pasándole el password que hemos insertado y el segundo parámetro es el algoritmo usado para encriptar el password.

Tenemos dos:

  • PASSWORD_DEFAULT
  • PASSWORD_BCRYPT

La segunda opción tiene mas opciones, puedes verlas aqui.

Tenemos un video donde lo explicamos:

Espero que os sea de ayuda. Si tenéis dudas, preguntad. Estamos para ayudarte.

Compartir

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *