Autorização e autenticação em PHP: guia completo com exemplos

Treinador Online de Python para Iniciantes

Aprenda Python facilmente sem sobrecarga teórica. Resolva tarefas práticas com verificação automática e escreva código diretamente no navegador.

Start Course

Autorização e autenticação em PHP: como proteger seu site



Segurança é um dos aspectos-chave de qualquer aplicação web. Em PHP, a autenticação (verificação da identidade do usuário) e a autorização (determinação de seus direitos de acesso) são implementadas usando ferramentas integradas: sessões, cookies, hash de senhas e trabalho com bancos de dados. Neste artigo, abordaremos o ciclo completo de criação de um sistema de login, registro e controle de acesso em PHP.



1. Conceitos básicos



  • Autenticação — processo de verificar se o usuário é quem diz ser (geralmente por login e senha).
  • Autorização — verificação se o usuário autenticado tem permissão para realizar uma determinada ação (por exemplo, acesso ao painel de administração).
  • Sessão — armazenamento temporário de dados no servidor, vinculado a um visitante específico por meio de um identificador único (ID de sessão).
  • Hash de senhas — transformação da senha em uma string irreversível para armazenamento seguro no banco de dados.


2. Registro de usuário



O primeiro passo é criar um formulário de registro e um manipulador. A senha nunca é armazenada em texto simples — usamos a função password_hash().



2.1. Formulário de registro (register.php)



<form method="post" action="register_handler.php">    <input type="text" name="username" placeholder="Usuário" required>    <input type="email" name="email" placeholder="Email" required>    <input type="password" name="password" placeholder="Senha" required>    <button type="submit">Registrar</button></form>


2.2. Manipulador de registro (register_handler.php)



<?php// Conexão ao BD (PDO)$pdo = new PDO('mysql:host=localhost;dbname=test', 'root', '');

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

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

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


Use PASSWORD_BCRYPT — ele gera automaticamente um salt e é considerado bastante seguro.



3. Autenticação (login no sistema)



Ao fazer login, comparamos a senha inserida com o hash do banco de dados usando password_verify() e criamos uma sessão.



3.1. Formulário de login (login.php)



<form method="post" action="login_handler.php">    <input type="text" name="username" placeholder="Usuário" required>    <input type="password" name="password" placeholder="Senha" required>    <button type="submit">Entrar</button></form>


3.2. Manipulador de login (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'])) { // Autenticação bem-sucedida $_SESSION['user_id'] = $user['id']; $_SESSION['username'] = $user['username']; $_SESSION['role'] = $user['role']; // para autorização header('Location: dashboard.php');} else { echo "Usuário ou senha inválidos";}?>


4. Autorização (controle de acesso)



Após a autenticação, o usuário recebe uma função (por exemplo, 'user', 'admin', 'moderator'). A autorização verifica essa função antes de executar ações.



4.1. Verificação simples de função



<?phpsession_start();

// Verifica se o usuário está autenticado

Recommendations