Criando cookies seguros no PHP com HTTPOnly e Secure

Método para criar cookies seguros no PHP, protegendo contra acessos indevidos e garantindo uma comunicação criptografada.

Introdução

Os cookies são amplamente utilizados para armazenar informações no navegador do usuário, mas se não forem configurados corretamente, podem representar um risco de segurança. Utilizando os atributos HTTPOnly e Secure, podemos evitar ataques como o Cross-Site Scripting (XSS) e proteger a comunicação dos cookies contra interceptação.

Para garantir que um cookie seja transmitido apenas via HTTPS e não possa ser acessado por scripts do lado do cliente, usamos a função setcookie() com os atributos apropriados:

setcookie('usuario', 'João', [
    'expires' => time() + 3600,
    'path' => '/',
    'domain' => '',
    'secure' => true,
    'httponly' => true,
    'samesite' => 'Strict'
]);

Explicação dos parâmetros de segurança:

  • secure => true: Garante que o cookie só seja transmitido em conexões HTTPS.
  • httponly => true: Impede que o cookie seja acessado via JavaScript, protegendo contra ataques XSS.
  • samesite => 'Strict': Restringe o envio do cookie apenas para requisições feitas a partir do mesmo domínio, reduzindo o risco de ataques CSRF.

Podemos confirmar se o cookie foi armazenado no navegador utilizando:

if (isset($_COOKIE['usuario'])) {
    echo 'Usuário: ' . $_COOKIE['usuario'];
} else {
    echo 'Cookie seguro não encontrado!';
}

Caso o cookie tenha sido definido corretamente, ele será exibido. Caso contrário, é necessário verificar se o servidor está usando HTTPS e se as configurações do navegador permitem cookies seguros.

Importância dos cookies seguros em aplicações web

Sem os atributos HTTPOnly e Secure, um cookie pode ser acessado por scripts maliciosos ou transmitido de forma insegura pela rede. Isso expõe a aplicação a ataques, especialmente se o cookie contiver informações de autenticação.

Exemplos de ataques evitados:

  • XSS (Cross-Site Scripting): Um atacante pode injetar scripts maliciosos que roubam cookies sem HTTPOnly.
  • Interceptação de Cookies: Sem Secure, cookies podem ser transmitidos em conexões HTTP inseguras, permitindo que sejam interceptados por invasores.

Conclusão

Criar cookies seguros no PHP é essencial para proteger a privacidade dos usuários e evitar vulnerabilidades comuns em aplicações web. Ao utilizar HTTPOnly, Secure e SameSite, garantimos que os cookies sejam transmitidos de maneira segura e acessíveis apenas pelo servidor.

A segurança dos cookies é um aspecto fundamental no desenvolvimento de aplicações web. Muitos ataques bem-sucedidos ocorrem devido à falta de configurações adequadas, permitindo que invasores acessem informações sensíveis armazenadas nos cookies.

Uma boa prática recomendada é sempre ativar Secure para garantir que os cookies sejam transmitidos apenas por conexões HTTPS. Além disso, HTTPOnly evita que scripts do lado do cliente manipulem cookies, prevenindo ataques XSS que podem roubar credenciais de usuários.

Outro fator importante é a configuração do atributo SameSite, que previne ataques CSRF ao restringir o envio de cookies apenas para requisições originadas no mesmo site. Com essas medidas, as aplicações se tornam significativamente mais seguras e os dados dos usuários são protegidos contra ameaças comuns na web.

Algumas aplicações:

  • Armazenar tokens de autenticação de forma segura.
  • Prevenir ataques XSS impedindo acesso ao cookie via JavaScript.
  • Garantir que cookies só sejam transmitidos via HTTPS.
  • Melhorar a proteção contra ataques CSRF.

Dicas para quem está começando

  • Sempre utilize Secure para garantir que o cookie só seja transmitido em HTTPS.
  • Ative HTTPOnly para evitar que o cookie seja acessado por JavaScript malicioso.
  • Use SameSite=Strict para restringir o envio do cookie em requisições externas.
  • Teste a configuração dos cookies no navegador para garantir que foram definidos corretamente.
  • Se precisar que o cookie seja acessível entre subdomínios, defina o parâmetro domain corretamente.
Foto de Gustavo Ferraz
Contribuições de
Gustavo Ferraz

Desenvolvedor backend com experiência em PHP, Java e integração de APIs em Node.js e Python.

Mais sobre o autor
Compartilhe este tutorial: Como criar um cookie seguro no PHP (HTTPOnly e Secure)?

Compartilhe este tutorial

Continue aprendendo:

Como definir a expiração de um cookie no PHP?

Método para definir o tempo de vida de um cookie no PHP, permitindo controle sobre a duração do armazenamento das informações.

Tutorial anterior

Como armazenar múltiplos valores em um único cookie no PHP?

Método para armazenar vários valores dentro de um único cookie no PHP, otimizando o armazenamento de informações do usuário.

Próximo tutorial