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: do básico à segurança



No desenvolvimento web moderno, a autenticação (verificação da identidade do usuário) e a autorização (verificação de permissões de acesso) são mecanismos fundamentais de segurança. Em PHP, esses processos são implementados através do trabalho com sessões, cookies, hash de senhas e tokens. Neste artigo, abordaremos todos os aspectos essenciais necessários para criar um sistema de login seguro no site educacional pythonlib.ru.



1. Conceitos básicos: autenticação vs autorização



Antes de escrever código, é importante distinguir claramente os dois termos:



  • Autenticação — processo de verificar se o usuário é quem diz ser (login + senha, biometria, token).
  • Autorização — determinação de quais recursos e ações estão disponíveis para o usuário autenticado (funções: admin, moderador, usuário).


Em PHP, a autenticação geralmente é feita através de sessões ou JWT, e a autorização através da verificação de funções no banco de dados.



2. Hash de senhas: nunca armazene senhas em texto puro



O PHP fornece funções nativas para hash seguro de senhas. Use password_hash() e password_verify() — este é o padrão moderno.



// Registro de usuário$password = $_POST['password'];$hashedPassword = password_hash($password, PASSWORD_BCRYPT, ['cost' => 12]);

// Salvamos $hashedPassword no BD$sql = "INSERT INTO users (email, password_hash) VALUES (?, ?)";$stmt = $pdo->prepare($sql);$stmt->execute([$_POST['email'], $hashedPassword]);


// Verificação no login$inputPassword = $_POST['password'];$storedHash = $user['password_hash']; // do BD

if (password_verify($inputPassword, $storedHash)) { // Autenticação bem-sucedida $_SESSION['user_id'] = $user['id'];} else { // Senha incorreta}


3. Gerenciamento de sessões em PHP



Sessões são a forma mais comum de rastrear usuários autenticados. O PHP gera automaticamente um identificador de sessão único e o armazena em um cookie.



// Início da sessão (sempre no início do script)session_start();

// Após login bem-sucedido$_SESSION['user_id'] = $user['id'];$_SESSION['user_role'] = $user['role']; // para autorização$_SESSION['logged_in'] = true;

// Verificação de autenticação em páginas protegidasfunction requireAuth() { if (!isset($_SESSION['logged_in']) || $_SESSION['logged_in'] !== true) { header('Location: /login.php'); exit; }}

// Logoutsession_destroy();setcookie(session_name(), '', time() - 3600, '/');


4. Segurança de sessões: proteção contra ataques



Para prevenir sequestro de sessão (Session Hijacking) e fixação de sessão (Session Fixation), use as seguintes medidas:



  • Regeneração do ID da sessão após o login:


session_regenerate_id(true); // remove a sessão antiga


  • Verificação de User-Agent e IP (opcional, mas aumenta a segurança):


$_SESSION['user_agent'] = $_SERVER['HTTP_USER_AGENT'];

// Em cada requisiçãoif ($_SESSION['user_agent'] !== $_SERVER['HTTP_USER_AGENT']) { session_destroy(); die('Atividade suspeita');}


  • Configuração de flags para o cookie de sessão no php.ini ou via session_set_cookie_params():


session_set_cookie_params([    'lifetime' => 0,           // até fechar o navegador    'secure' => true,          // apenas HTTPS    'httponly' => true,        // inacessível via JavaScript    'samesite' => 'Strict'     // proteção contra CSRF]);session_start();


5. JWT (JSON Web Tokens)

Recommendations