privacy
Atributs de cookies segures
MetricSpot inspecciona les capçaleres Set-Cookie buscant Secure, HttpOnly i SameSite. Si falta qualsevol d'aquests, amplies la superfície d'atac per a robatori de cookies i CSRF.
Què comprova aquesta auditoria
Llegeix cada capçalera de resposta Set-Cookie i comprova tres flags:
Secure, la cookie només s’envia sobre HTTPS.HttpOnly, la cookie no és llegible des de JavaScript (bloqueja el robatori via XSS).SameSite=Lax|Strict|None, comportament en peticions cross-site (bloqueja CSRF).
Passa quan cada cookie que porti autenticació o estat de sessió té els tres.
Per què importa
Les cookies guarden les claus de les sessions dels teus usuaris. Una cookie sense aquests flags està a una vulnerabilitat XSS o a una Wi-Fi hostil de patir un account takeover:
- Sense
Secure→ la cookie viatja sobre HTTP pla a la primera petició abans que HSTS s’activi. Esnifable a la Wi-Fi d’un bar. - Sense
HttpOnly→ qualsevol script injectat (XSS, dependència npm maliciosa, anunci hostil) pot llegir la cookie viadocument.cookiei exfiltrar-la. - Sense
SameSite→ cross-site request forgery (CSRF). Una pàgina maliciosa pot enviar formularis o disparar peticions com a usuari teu autenticat.
Els navegadors han anat endurint els valors per defecte: Chrome ara envia SameSite=Lax per defecte, però el codi llegat que estableix cookies sense flags explícits encara filtra.
Com solucionar-ho
Estableix cada cookie de sessió/auth amb els tres flags.
Set-Cookie: session=abc123; Path=/; Secure; HttpOnly; SameSite=Lax; Max-Age=86400
Express / Node.js:
res.cookie("session", token, {
httpOnly: true,
secure: true,
sameSite: "lax",
maxAge: 86400 * 1000,
path: "/",
});
Next.js (App Router amb cookies()):
import { cookies } from "next/headers";
cookies().set({
name: "session",
value: token,
httpOnly: true,
secure: true,
sameSite: "lax",
path: "/",
maxAge: 86400,
});
Bun.serve():
return new Response("ok", {
headers: {
"Set-Cookie": `session=${token}; HttpOnly; Secure; SameSite=Lax; Path=/; Max-Age=86400`,
},
});
Django:
# settings.py
SESSION_COOKIE_SECURE = True
SESSION_COOKIE_HTTPONLY = True
SESSION_COOKIE_SAMESITE = "Lax"
CSRF_COOKIE_SECURE = True
CSRF_COOKIE_HTTPONLY = True
CSRF_COOKIE_SAMESITE = "Lax"
Rails:
# config/initializers/session_store.rb
Rails.application.config.session_store :cookie_store,
key: "_app_session",
secure: Rails.env.production?,
httponly: true,
same_site: :lax
PHP / WordPress: a wp-config.php o abans de qualsevol output:
ini_set('session.cookie_secure', '1');
ini_set('session.cookie_httponly', '1');
ini_set('session.cookie_samesite', 'Lax');
Quin valor de SameSite?
Strict, la cookie mai s’envia en peticions cross-site. Protecció màxima, però trenca el cas en què l’usuari segueix un enllaç al teu lloc i arriba desconnectat. Bo per a fluxos de risc alt (admin, banca).Lax(per defecte), la cookie s’envia en navegacions top-level (clicar un enllaç) però no en POSTs cross-site, iframes o peticions d’imatge. El default correcte per a la majoria de llocs.None, la cookie s’envia en totes les peticions cross-site. RequereixSecure. Fes-ho servir només si realment necessites context de tercers (widgets embeguts, proveïdors d’identitat).
Els prefixos al nom de cookie afegeixen una segona capa d’aplicació:
__Secure-, el navegador es nega a posar aquesta cookie si no està tambéSecure.__Host-, el navegador es nega si no estàSecure,Path=/i sense atributDomain.
Set-Cookie: __Host-session=abc123; Path=/; Secure; HttpOnly; SameSite=Lax
Combina aquesta regla amb HTTPS, activar HSTS i la referrer policy per a una línia base de seguretat de transport completa.
Preguntes freqüents
HttpOnly trencarà el meu codi del costat client?
Només si llegeixes la cookie des de JavaScript. Per a cookies de sessió/auth no ho hauries de fer: la cookie hauria de ser opaca al client i només la fa servir el servidor. Si guardes dades que el JS necessita llegir, és una categoria diferent de cookie (preferències, estat de UI) i HttpOnly no aplica.
I les cookies de consentiment i analítica?
Les cookies de consentiment i analítica sovint necessiten genuïnament ser llegibles per JavaScript. Posa-hi Secure i SameSite=Lax, però salta’t HttpOnly. La comprovació de MetricSpot ho tolera, només avisa quan una cookie de sessió no té els flags.
Això afecta directament el compliment del RGPD?
No el costat de consentiment/base legal, sinó el costat de seguretat. L’Article 32 del RGPD requereix “mesures tècniques adequades”, els flags de cookies que falten se citen rutinàriament en decisions d’autoritats supervisores com una fallada de seguretat. Combina amb un banner de consentiment de cookies i política de privacitat per a la capa legal.
Fonts
Última actualització 2026-05-11