Referrer-Policy: prevenire scurgere date prin headerul Referer
URL-urile cu tokeni sau date PII se scurg automat către domenii externe prin headerul Referer. Un singur header rezolvă problema.
Pe scurt
Headerul Referer (cu un singur “r” — typo istoric perpetuat din RFC) e trimis automat de browser la fiecare request și conține URL-ul paginii de pe care vine utilizatorul. Dacă URL-ul vostru conține tokeni de sesiune, parametri PII (Personally Identifiable Information), sau path-uri interne sensibile, ele sunt leaked către orice domeniu către care faceți request — CDN-uri, analytics, ad networks, social plugins.
Referrer-Policy: strict-origin-when-cross-origin e standardul modern care permite full referer pe same-origin, doar origin-ul pe cross-origin HTTPS, și nimic pe HTTPS→HTTP downgrade.
În contextul GDPR Art.5 (data minimization) și Art.32 (security by design), gestionarea Referer e o responsabilitate legală, nu doar best practice.
Cazuri concrete de scurgere
Token-ul de password reset
URL-ul de reset password al utilizatorului:
https://firma.ro/reset?token=abc123def456&email=user@partener.com
Pe această pagină, există link extern (footer, ad, analytics):
<a href="https://help.example.com/contact">Contact</a>
Când utilizatorul dă click sau dacă pagina face request automat la help.example.com, browser trimite:
Referer: https://firma.ro/reset?token=abc123def456&email=user@partener.com
help.example.com (sau ce CDN/analytics e între) vede tokenul + email-ul. Dacă logurile lor sunt accesibile angajaților sau compromise, atacatorul poate face reset password în numele utilizatorului.
URL-uri admin cu UUID-uri sensibile
https://firma.ro/admin/users/12345/medical-record/edit
Pe pagină, <script src="https://googletagmanager.com/gtm.js"> — Google primește:
Referer: https://firma.ro/admin/users/12345/medical-record/edit
Date PII medicale leaked către Google Analytics. Potențial breach GDPR direct (Art.9 — categorii speciale de date, sănătate).
Search query-uri private
https://intranet.firma.ro/search?q=cifra-afaceri-2024-confidential
Orice link extern → Referer cu query-ul confidențial către third party.
Anatomia Referrer-Policy
Referrer-Policy: strict-origin-when-cross-origin
| Politică | Comportament |
|---|---|
no-referrer | Niciun Referer trimis vreodată — paranoid |
no-referrer-when-downgrade | Default browser legacy — Referer doar la same protocol HTTPS→HTTPS |
origin | Doar origin-ul (https://firma.ro), fără path/query |
origin-when-cross-origin | Full URL pe same-origin, doar origin pe cross-origin |
strict-origin | Doar origin-ul pe HTTPS→HTTPS, nimic pe HTTPS→HTTP |
strict-origin-when-cross-origin | Modern default — full pe same-origin, origin pe cross-origin HTTPS, nimic pe downgrade |
same-origin | Full pe same-origin, nimic pe cross-origin |
unsafe-url | Full URL mereu — periculos, nu folosiți |
Recomandare pentru 99% din cazuri: strict-origin-when-cross-origin (default Chrome 85+, Firefox 87+).
Implementare pas-cu-pas
Pas 1 — Header global
nginx:
add_header Referrer-Policy "strict-origin-when-cross-origin" always;
Apache:
Header always set Referrer-Policy "strict-origin-when-cross-origin"
Caddy:
header Referrer-Policy strict-origin-when-cross-origin
Express (Helmet):
app.use(helmet.referrerPolicy({ policy: 'strict-origin-when-cross-origin' }));
Pas 2 — Per-link override pentru paranoid
Pentru link-uri foarte sensibile (admin → extern), rel="noreferrer" HTML attribute:
<a href="https://external.com" rel="noreferrer">External</a>
Combinat cu noopener (anti-tabnabbing):
<a href="https://external.com" rel="noreferrer noopener" target="_blank">External</a>
Pas 3 — Mută tokeni din query string
Best practice fundamentală: tokeni de password reset, magic link-uri, session tokens NU în URL query. Folosiți:
- POST body pentru form submissions
- Session cookie HttpOnly pentru identificator sesiune
- URL fragment (
#token=xxx) pentru tokeni client-side (fragmentul nu se trimite în Referer și nu apare în log-uri server)
Dacă neapărat URL-ul trebuie să conțină token (magic link în email):
- Token e single-use (consumat la prima vizită)
- Token expiră rapid (15 min - 24h max)
- Pagina destinație are
Referrer-Policy: no-referrerstrict - Pagina destinație face redirect imediat la URL fără token
Pas 4 — Audit URL-uri existente
# Search log-uri pentru URL-uri cu PII / tokeni
grep -E "token=|email=|password=|key=" /var/log/nginx/access.log
Migrare URL-uri descoperite la POST body sau session cookies.
Confuzii frecvente
“Referrer-Policy reduce traficul referral pe Google Analytics.” — Adevărat parțial. strict-origin-when-cross-origin trimite doar origin-ul către domenii externe (GA primește https://firma.ro, nu URL-ul exact). Pentru analytics interne folosiți server-side tracking sau first-party.
“Referrer header e oricum opt-in, browserele moderne îl strip-uiesc.” — Greșit. Browser-ele trimit Referer by default — Referrer-Policy e mecanismul de control. Fără header explicit, default-ul depinde de browser (strict-origin-when-cross-origin în Chrome 85+, dar nu universal).
“GDPR nu cere asta explicit.” — GDPR Art.32 cere “măsuri tehnice și organizatorice adecvate”. DPA-uri europene (CNIL Franța, garante Italia) au amendat firme pentru leaking PII via Referer în 2023-2024. Implicit obligatoriu.
Verificați acum
ARTEMIS detectează lipsa Referrer-Policy în orice scanare Site (2 EUR) plus 36 alte verificări.
🔗 Soluții complementare CAI Technology
- ARTEMIS — Verificare Referrer-Policy + 36 alte headers/teste.
- Auditope — Audit holistic web (SEO + Performance + GDPR + UX).
- Lexnomia — Evaluare GDPR auditor-grade — leaking PII e categorie cheie.
- BeLegal — Verificare gratuită 5 minute GDPR.
- AriaUnited — Consultanță fonduri europene pentru investiții privacy / data minimization.