Autorización y autenticación en PHP: guía completa con ejemplos

Entrenador de Python en Línea para Principiantes

Aprende Python fácilmente sin sobrecargarte de teoría. Resuelve tareas prácticas con verificación automática, recibe pistas y escribe código directamente en el navegador, sin instalar nada.

Start Course

Autorización y autenticación en PHP: cómo proteger su sitio web



La seguridad es uno de los aspectos clave de cualquier aplicación web. En PHP, la autenticación (verificación de la identidad del usuario) y la autorización (determinación de sus permisos de acceso) se implementan mediante herramientas integradas: sesiones, cookies, hash de contraseñas y trabajo con bases de datos. En este artículo, analizaremos el ciclo completo de creación de un sistema de inicio de sesión, registro y control de acceso en PHP.



1. Conceptos básicos



  • Autenticación — proceso de verificar si el usuario es quien dice ser (generalmente mediante nombre de usuario y contraseña).
  • Autorización — verificación de si un usuario autenticado tiene derecho a realizar una acción específica (por ejemplo, acceder al panel de administración).
  • Sesión — almacenamiento temporal de datos en el servidor, vinculado a un visitante específico mediante un identificador único (ID de sesión).
  • Hash de contraseñas — transformación de una contraseña en una cadena irreversible para almacenarla de forma segura en la base de datos.


2. Registro de usuario



El primer paso es crear un formulario de registro y su procesador. La contraseña nunca se almacena en texto plano; usamos la función password_hash().



2.1. Formulario de registro (register.php)



<form method="post" action="register_handler.php">    <input type="text" name="username" placeholder="Usuario" required>    <input type="email" name="email" placeholder="Correo electrónico" required>    <input type="password" name="password" placeholder="Contraseña" required>    <button type="submit">Registrarse</button></form>


2.2. Procesador de registro (register_handler.php)



<?php// Conexión a la base de datos (PDO)$pdo = new PDO('mysql:host=localhost;dbname=test', 'root', '');

$username = $_POST['username'];$email = $_POST['email'];$password = password_hash($_POST['password'], PASSWORD_BCRYPT); // hasheamos

$stmt = $pdo->prepare("INSERT INTO users (username, email, password) VALUES (?, ?, ?)");$stmt->execute([$username, $email, $password]);

header('Location: login.php');?>


Use PASSWORD_BCRYPT — genera automáticamente un salt y se considera suficientemente seguro.



3. Autenticación (inicio de sesión)



Al iniciar sesión, comparamos la contraseña ingresada con el hash de la base de datos usando password_verify() y creamos una sesión.



3.1. Formulario de inicio de sesión (login.php)



<form method="post" action="login_handler.php">    <input type="text" name="username" placeholder="Usuario" required>    <input type="password" name="password" placeholder="Contraseña" required>    <button type="submit">Iniciar sesión</button></form>


3.2. Procesador de inicio de sesión (login_handler.php)



<?phpsession_start();$pdo = new PDO('mysql:host=localhost;dbname=test', 'root', '');

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

$stmt = $pdo->prepare("SELECT * FROM users WHERE username = ?");$stmt->execute([$username]);$user = $stmt->fetch();

if ($user && password_verify($password, $user['password'])) { // Autenticación exitosa $_SESSION['user_id'] = $user['id']; $_SESSION['username'] = $user['username']; $_SESSION['role'] = $user['role']; // para autorización header('Location: dashboard.php');} else { echo "Usuario o contraseña incorrectos";}?>


4. Autorización (control de acceso)



Después de la autenticación, el usuario obtiene un rol (por ejemplo, 'user', 'admin', 'moderator'). La autorización verifica este rol antes de realizar acciones.



4.1. Verificación simple de rol



<?phpsession_start();

// Verificamos si el usuario está autenticado

Recommendations