Limitando o tempo de sessão no PHP para maior segurança

Métodos para limitar o tempo de sessão no PHP, prevenindo sequestro de sessão e aumentando a segurança da aplicação.

Introdução

Manter sessões PHP ativas por muito tempo pode representar um risco de segurança, especialmente se um atacante conseguir sequestrar a sessão de um usuário. Definir um tempo limite para sessões reduz a probabilidade de ataques e melhora a proteção da aplicação.

1. Configurando o tempo de expiração da sessão no php.ini

Podemos definir um tempo máximo para as sessões diretamente no php.ini:

session.gc_maxlifetime = 1800
session.cookie_lifetime = 1800

Isso garante que as sessões expiram após 30 minutos de inatividade.

2. Definindo a expiração da sessão no código PHP

Caso não possamos modificar o php.ini, podemos definir a expiração manualmente:

ini_set('session.gc_maxlifetime', 1800);
ini_set('session.cookie_lifetime', 1800);
session_start();

Isso aplica o tempo limite de 30 minutos diretamente no código.

3. Destruindo sessões inativas

Além de definir um tempo limite, podemos verificar a última atividade do usuário e destruir a sessão caso ele fique inativo por um tempo:

session_start();
if (isset($_SESSION['ultimo_acesso']) && (time() - $_SESSION['ultimo_acesso'] > 1800)) {
    session_destroy();
    header("Location: login.php");
    exit();
}
$_SESSION['ultimo_acesso'] = time();

Isso força o logout de usuários inativos, reduzindo riscos de sessões sequestradas.

4. Regenerando o ID da sessão para evitar reutilização

Sempre que um usuário fizer login ou uma ação sensível, regeneramos o ID da sessão:

session_regenerate_id(true);

Isso impede que um atacante reutilize um ID de sessão roubado.

5. Configurando cookies seguros para a sessão

Para garantir que os cookies de sessão não sejam acessados por scripts maliciosos, configuramos as seguintes diretivas:

session_set_cookie_params([
    'lifetime' => 1800,
    'path' => '/',
    'domain' => '',
    'secure' => true,
    'httponly' => true,
    'samesite' => 'Strict'
]);
session_start();

Isso protege a sessão contra ataques Cross-Site Scripting (XSS) e sequestro de cookies.

Conclusão

Limitar o tempo de sessão no PHP é uma prática essencial para proteger aplicações contra acessos não autorizados e sequestro de sessão. Configurar o tempo de expiração corretamente, destruir sessões inativas e regenerar o ID da sessão são medidas fundamentais para reforçar a segurança do sistema.

Manter sessões PHP ativas por períodos longos aumenta os riscos de ataques como Session Hijacking, onde um invasor pode capturar e reutilizar um ID de sessão para se passar pelo usuário legítimo. Esse tipo de ataque pode comprometer informações sensíveis e permitir acessos não autorizados.

Uma das principais estratégias para mitigar esse risco é definir um tempo de expiração adequado para as sessões, forçando o logout de usuários inativos. Além disso, a regeneração do ID da sessão impede que um invasor reutilize uma sessão antiga, aumentando ainda mais a segurança.

Outra prática recomendada é a configuração segura dos cookies de sessão, garantindo que apenas o servidor possa acessá-los. Essas medidas combinadas reduzem significativamente a superfície de ataque e protegem os usuários contra acessos indevidos.

Algumas aplicações:

  • Reduzir o risco de sequestro de sessão por meio de IDs expirados.
  • Forçar o logout de usuários inativos, impedindo acessos não autorizados.
  • Melhorar a segurança de aplicações que lidam com informações sensíveis.
  • Impedir que sessões sejam mantidas ativas indefinidamente sem necessidade.

Dicas para quem está começando

  • Defina um tempo de expiração adequado para as sessões no php.ini.
  • Implemente verificações no código para destruir sessões inativas automaticamente.
  • Registre a última atividade do usuário e force o logout após um período de inatividade.
  • Utilize session_regenerate_id(true) para evitar reutilização de IDs de sessão.
  • Configure cookies de sessão como httponly e secure para evitar ataques baseados em cookies.

Contribuições de Renata Oliveira

Compartilhe este tutorial: Como limitar o tempo de sessão no PHP para reduzir riscos de sequestro?

Compartilhe este tutorial

Continue aprendendo:

Como desativar funções perigosas do PHP no php.ini para aumentar a segurança?

Métodos para desativar funções PHP potencialmente perigosas no php.ini, prevenindo exploração de vulnerabilidades e ataques remotos.

Tutorial anterior

Como proteger rotas e endpoints críticos no PHP contra acessos não autorizados?

Métodos para proteger rotas e endpoints críticos no PHP, evitando acessos não autorizados e garantindo segurança da aplicação.

Próximo tutorial