Evitando acesso indevido de cookies via JavaScript no PHP

Método para garantir que cookies no PHP sejam protegidos contra acesso via JavaScript, prevenindo ataques XSS.

Introdução

Cookies são frequentemente utilizados para armazenar informações de autenticação e preferências do usuário. No entanto, se não forem protegidos corretamente, podem ser acessados via JavaScript por scripts maliciosos, facilitando ataques do tipo Cross-Site Scripting (XSS).

Como evitar que cookies sejam acessados por JavaScript

Para impedir que um cookie seja lido por JavaScript, devemos ativar o atributo HttpOnly ao criá-lo:

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

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

  • httponly => true: Impede que o cookie seja acessado por scripts do lado do cliente (JavaScript).
  • secure => true: Garante que o cookie só seja transmitido em conexões HTTPS.
  • samesite => 'Strict': Evita envio do cookie em requisições de terceiros, reduzindo o risco de ataques CSRF.

Podemos testar se um cookie está acessível no console do navegador digitando:

document.cookie;

Se o cookie foi definido corretamente com HttpOnly, ele não aparecerá na lista de cookies visíveis pelo JavaScript.

Por que evitar que cookies sejam acessados via JavaScript?

Se um cookie de autenticação puder ser lido por JavaScript, ele pode ser roubado através de um ataque XSS e usado para sequestrar sessões de usuários. Portanto, sempre que possível, o atributo HttpOnly deve ser ativado.

Conclusão

Impedir que cookies sejam acessados via JavaScript é uma prática essencial para aumentar a segurança da aplicação. O uso de HttpOnly, Secure e SameSite ajuda a reduzir riscos de vazamento de informações e ataques comuns, como XSS e CSRF.

Ataques XSS (Cross-Site Scripting) são uma das vulnerabilidades mais comuns em aplicações web e ocorrem quando um invasor injeta scripts maliciosos na página, explorando falhas de segurança para acessar informações do usuário.

Quando um cookie não tem a proteção HttpOnly, um script malicioso pode lê-lo e enviá-lo para um servidor controlado pelo atacante, permitindo que ele se passe pelo usuário legítimo e acesse informações confidenciais. Isso é especialmente crítico em aplicações que armazenam tokens de autenticação ou identificadores de sessão nos cookies.

A melhor forma de prevenir esse tipo de ataque é seguir as práticas recomendadas de segurança ao definir cookies. Além de utilizar HttpOnly, combinar essa proteção com Secure (para garantir que o cookie só seja transmitido em HTTPS) e SameSite=Strict reduz significativamente os riscos de exploração.

Algumas aplicações:

  • Proteger tokens de autenticação armazenados em cookies.
  • Impedir que scripts maliciosos acessem dados do usuário.
  • Reduzir vulnerabilidades de segurança contra ataques XSS.
  • Garantir que apenas o servidor possa ler e modificar informações sensíveis.

Dicas para quem está começando

  • Sempre utilize HttpOnly ao definir cookies no PHP.
  • Ative Secure para garantir que o cookie só seja enviado em conexões HTTPS.
  • Verifique se os cookies aparecem no document.cookie do console do navegador (se estiverem protegidos, não aparecerão).
  • Utilize SameSite=Strict para evitar o envio de cookies em requisições de terceiros.
  • Evite armazenar informações sensíveis diretamente em cookies, prefira armazenar identificadores e buscar os dados no servidor.

Contribuições de Renata Oliveira

Compartilhe este tutorial: Como evitar que cookies sejam acessados por JavaScript no PHP?

Compartilhe este tutorial

Continue aprendendo:

Como criptografar o valor de um cookie no PHP para maior segurança?

Método para armazenar cookies criptografados no PHP, protegendo informações do usuário contra acessos indevidos.

Tutorial anterior

Como armazenar sessões usando Redis no PHP?

Método para armazenar sessões no Redis no PHP, permitindo maior escalabilidade e melhor desempenho em aplicações web.

Próximo tutorial