Boas práticas de segurança de sessões
Evite fixação e sequestro de sessões com regeneração e sinalizadores.
Boas práticas de segurança de sessões é uma aula grátis de PHP Academy no CoddyKit. Esta é a aula 2 de 4. Você pode ler a aula completa abaixo gratuitamente — depois pratica ao vivo no navegador com um editor de código integrado e um tutor de IA 24/7. Faz parte do caminho de aprendizado de PHP Academy, e seu progresso é sincronizado entre a web e o app CoddyKit. O curso de PHP Academy inclui 4 aulas no total.
Ataque de fixação de sessão
Um invasor induz um usuário a usar um ID de sessão que ele já conhece e, depois do login, sequestra a sessão.
Impedindo a fixação: session_regenerate_id()
Após qualquer alteração de privilégio (autenticação ou mudança de função), gere um novo ID de sessão mantendo os dados existentes.
<?php
session_start();
// After successful login:
session_regenerate_id(true); // true = delete old session file
$_SESSION["user_id"] = $userId;Sequestro de sessão
Um atacante rouba o ID da sessão por meio de interceptação de rede, XSS ou vazamento de registros. Mitigue o risco usando HTTPS, cookies HttpOnly e identificação por impressão digital.
session.cookie_httponly
Impeça que JavaScript leia o cookie de sessão — isso interrompe a maioria dos roubos de sessão baseados em XSS.
<?php
ini_set("session.cookie_httponly", 1);
session_start();session.cookie_secure
Marque o cookie de sessão como Secure para que ele seja enviado somente por HTTPS.
<?php
ini_set("session.cookie_secure", 1);
session_start();session.cookie_samesite
Defina SameSite como Strict ou Lax para impedir ataques CSRF que usam o cookie de sessão.
<?php
ini_set("session.cookie_samesite", "Strict");
session_start();Vinculação ao agente do usuário
Armazene o agente do usuário na sessão durante o início de sessão e verifique-o em cada solicitação para detectar sequestros.
<?php
if (!isset($_SESSION["ua"])) {
$_SESSION["ua"] = $_SERVER["HTTP_USER_AGENT"];
} elseif ($_SESSION["ua"] !== $_SERVER["HTTP_USER_AGENT"]) {
session_destroy();
die("Session invalid");
}Tempo limite da sessão
Implemente tempos limite baseados na atividade — encerre automaticamente a sessão de usuários inativos.
<?php
$timeout = 1800;
if (isset($_SESSION["last_active"]) &&
time() - $_SESSION["last_active"] > $timeout) {
session_destroy();
header("Location: /login");
exit;
}
$_SESSION["last_active"] = time();session.use_strict_mode
Ative o modo estrito para que o servidor rejeite IDs de sessão não reconhecidos — isso impede a fixação de sessão por injeção de URL.
<?php
ini_set("session.use_strict_mode", 1);
session_start();Manipuladores de sessão personalizados
Armazenar sessões no Redis ou em um banco de dados permite invalidar centralmente todas as sessões de um usuário e monitorar as sessões ativas.
Regeneração periódica
Mesmo durante uma sessão autenticada longa, regenere o ID da sessão a cada 15–30 minutos para reduzir o risco de roubo do token.
Resumo
Sempre: use HTTPS, defina os sinalizadores HttpOnly+Secure+SameSite, chame session_regenerate_id(true) após o início de sessão, implemente tempos limite de inatividade e use o modo estrito.
Verificação rápida
O que session_regenerate_id(true) faz?
Perguntas Frequentes
A aula “Boas práticas de segurança de sessões” é grátis?
Sim — o texto completo de “Boas práticas de segurança de sessões” é grátis para ler aqui na web. Para praticá-la interativamente (um editor de código integrado e um tutor de IA 24/7) e desbloquear o restante do curso de PHP Academy, atualize para CoddyKit PRO. O curso de PHP Academy inclui 4 aulas no total.
O que vou aprender em “Boas práticas de segurança de sessões”?
Evite fixação e sequestro de sessões com regeneração e sinalizadores. Você pratica PHP Academy com código prático que executa diretamente no navegador, e um tutor de IA 24/7 responde suas dúvidas enquanto trabalha na aula.
Preciso ter experiência prévia para começar PHP Academy?
Nenhuma experiência prévia é necessária. PHP Academy no CoddyKit é estruturado para alunos iniciantes até avançados, então você pode começar aqui ou desde o início e aprender no seu ritmo. Esta é a aula 2 de 4.
Quanto tempo leva a aula “Boas práticas de segurança de sessões”?
A maioria das aulas CoddyKit leva cerca de 5–10 minutos. Cada uma é compacta e interativa, então você faz progresso constante e retoma exatamente de onde parou entre web e app.
Posso escrever e executar código nesta aula de PHP Academy?
Sim. Cada aula de PHP Academy inclui um editor de código integrado, então você escreve e executa código real direto no navegador e recebe feedback de IA instantaneamente — nenhuma configuração local necessária.
Todas as aulas deste curso
- Início e uso de sessões
- Boas práticas de segurança de sessões
- Definição e leitura de cookies
- Segurança de cookies: sinalizadores HttpOnly e Secure