Suas ideias em realidade digital!
Depois de implementar login com JWT, surge uma dúvida comum: onde armazenar o token no front-end?
As opções mais usadas são:
É simples e funciona bem:
localStorage.setItem("token", jwt);
Mas o problema é o XSS (Cross-Site Scripting). Se seu site tiver uma falha de XSS, um atacante pode executar:
localStorage.getItem("token");
E roubar o token.
Funciona igual ao localStorage, mas o token é apagado ao fechar o navegador.
sessionStorage.setItem("token", jwt);
Ainda sofre com XSS.
---O cookie httpOnly não pode ser acessado via JavaScript.
<?php
setcookie("access_token", $jwt, [
"expires" => time()+900,
"path" => "/",
"secure" => true,
"httponly" => true,
"samesite" => "Lax"
]);
Se usar cookie, você precisa proteger contra CSRF.
<?php
if ($_SERVER["REQUEST_METHOD"] === "POST") {
$csrfHeader = $_SERVER["HTTP_X_CSRF_TOKEN"] ?? "";
if ($csrfHeader !== $_SESSION["csrf_token"]) {
http_response_code(403);
exit;
}
}
---
| Armazenamento | XSS | CSRF | Recomendado? |
|---|---|---|---|
| localStorage | ❌ Vulnerável | ✔️ Não sofre CSRF | ⚠️ Só se não puder usar cookie |
| sessionStorage | ❌ Vulnerável | ✔️ Não sofre CSRF | ⚠️ Melhor que localStorage |
| Cookie httpOnly | ✔️ Protegido | ⚠️ Precisa proteção | ✅ Recomendado |
Para aplicações web modernas:
Evite armazenar JWT sensível em localStorage se segurança for prioridade.