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.
Testando se um cookie pode ser acessado por JavaScript
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.
Por que impedir acesso a cookies via JavaScript é fundamental para segurança?
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