Salt la conținut
Înapoi la blog

HTTP Security Headers — Ce Sunt și De Ce Le Ai Nevoie

SoftAudit1 martie 20269 min de citit
Distribuie

Imaginează-ți că trimiți un colet prin curier. Pe colet poți lipi etichete: „Fragil", „Nu deschide în ploaie", „Livrare doar destinatarului". Aceste etichete nu schimbă conținutul coletului, dar îi spun curierului cum să-l trateze.

Exact așa funcționează HTTP Security Headers — sunt „etichete" invizibile pe care serverul tău le atașează fiecărei pagini web trimise către browser. Ele nu schimbă conținutul site-ului, dar îi spun browserului ce are voie și ce nu are voie să facă.

Și totuși, conform statisticilor din 2026, peste 60% din site-urile web nu au configurat corect aceste headere. Rezultatul? Site-uri vulnerabile la atacuri care ar fi putut fi prevenite cu câteva linii de configurare.

De Ce Ar Trebui Să Te Intereseze?

Gândește-te la site-ul tău ca la o casă. Ai ușă, ai geamuri, poate ai și alarmă. Dar dacă ai lăsa o notă pe ușă care spune „Ușa din spate e deschisă, intrați liber"? Cam asta face un site fără security headers — lasă browserul să ia decizii pe cont propriu, fără instrucțiuni de securitate.

Concret, fără security headers adecvate:

  • Atacatorii pot injecta scripturi malițioase în paginile tale (XSS)
  • Site-ul tău poate fi încadrat într-un iframe pe un site fals (Clickjacking)
  • Datele utilizatorilor pot fi interceptate pe conexiuni nesecurizate
  • Browserul poate interpreta greșit fișierele, executând cod malițios

Vestea bună? Configurarea lor durează 15-30 de minute și nu necesită cunoștințe avansate de programare.

Cele 4 Tipuri de Atacuri Pe Care Le Previn

Înainte să vorbim despre headere, hai să înțelegem ce atacuri previn. Le explic simplu, fără jargon:

1. Cross-Site Scripting (XSS) — „Cuvinte Puse în Gura Ta"

Imaginează-ți că ai un magazin și un client scrie pe perete, în zona de recenzii: „Acest magazin are o promoție — dă-mi datele cardului". Alți clienți citesc mesajul și cred că vine de la tine.

XSS funcționează la fel: atacatorul injectează cod JavaScript în site-ul tău. Când alți vizitatori accesează pagina, codul rulează ca și cum ar fi al tău — poate fura cookie-uri, parole sau date personale.

Cât de frecvent este? XSS rămâne în OWASP Top 10 de peste 15 ani și reprezintă circa 30% din toate vulnerabilitățile web raportate.

2. Clickjacking — „Butonul Invizibil"

Cineva pune un sticler transparent peste butonul de lift. Tu crezi că apeși pe „Parter", dar de fapt apeși pe altceva. Pe web, atacatorul pune site-ul tău într-un iframe invizibil deasupra unui alt site. Utilizatorul crede că dă click pe ceva inofensiv, dar de fapt interacționează cu site-ul tău — poate aprobă o tranzacție, schimbă o parolă sau acordă permisiuni.

3. MIME Sniffing — „Deschide Pachetul Greșit"

Trimiți un colet etichetat „Cărți" dar înăuntru e altceva. Curierul zice: „Hmm, nu pare a fi cărți, hai să verific eu ce e". Pe web, un browser poate „mirosi" (sniff) conținutul unui fișier și decide singur ce tip de fișier este, ignorând ce spune serverul. Un fișier care pare o imagine poate fi de fapt un script malițios.

4. Downgrade Attack — „Forțează Ușa Veche"

Casa ta are două uși: una blindată (HTTPS) și una veche de lemn (HTTP). Atacatorul te redirecționează spre ușa de lemn, unde poate intercepta tot ce transmiți. Fără protecție, browserul acceptă conexiunea nesecurizată fără să clipească.

Cele 6 Security Headers Esențiale

Acum că știm ce atacuri prevenim, hai să vedem fiecare header și ce face. Am inclus o analogie pentru fiecare, plus configurarea exactă.

1. Content-Security-Policy (CSP) — „Lista de Invitați"

Analogia: Organizezi o petrecere și dai portarului o listă: „Doar acești oameni au voie înăuntru". Oricine altcineva, afară. CSP spune browserului exact de unde are voie să încarce resurse (scripturi, stiluri, imagini, fonturi).

Ce previne: XSS și injecția de date.

Exemplu de configurare:

Content-Security-Policy: default-src 'self'; script-src 'self' https://www.google-analytics.com; style-src 'self' 'unsafe-inline'; img-src 'self' data: https:; font-src 'self' https://fonts.gstatic.com; frame-ancestors 'none';

Ce înseamnă pe românește:

  • default-src 'self' — implicit, încarcă resurse doar de pe propriul domeniu
  • script-src 'self' https://www.google-analytics.com — scripturi doar de la noi și Google Analytics
  • style-src 'self' 'unsafe-inline' — stiluri de la noi + stiluri inline (necesare pentru multe framework-uri)
  • img-src 'self' data: https: — imagini de la noi, data URIs și orice sursă HTTPS
  • frame-ancestors 'none' — nimeni nu poate pune site-ul într-un iframe
Atenție: CSP este cel mai puternic header, dar și cel mai ușor de configurat greșit. O regulă prea strictă poate strica funcționalitatea site-ului. Recomandare: începe cu Content-Security-Policy-Report-Only pentru a testa fără să blochezi nimic, apoi treci la versiunea activă.

2. Strict-Transport-Security (HSTS) — „Încuietoarea Automată"

Analogia: Îi spui ușii tale să se încuie automat de fiecare dată. Chiar dacă cineva încearcă să o deschidă manual, rămâne încuiată. HSTS spune browserului: „De acum înainte, conectează-te la mine DOAR prin HTTPS. Chiar dacă cineva tastează HTTP, tu convertește automat".

Ce previne: Atacuri de downgrade și interceptare de trafic (man-in-the-middle).

Configurare:

Strict-Transport-Security: max-age=31536000; includeSubDomains; preload

Ce înseamnă:

  • max-age=31536000 — ține minte această regulă timp de 1 an (în secunde)
  • includeSubDomains — aplică și pentru subdomeniile tale
  • preload — cere includerea în lista de preload HSTS din browsere

Important: Asigură-te că ai certificat SSL valid pe toate subdomeniile înainte de a activa includeSubDomains.

3. X-Frame-Options — „Regula Anti-Încadrare"

Analogia: Pui o regulă pe tabloul din magazin: „Fotografiile din acest magazin NU pot fi folosite de alți comercianți în vitrinele lor". X-Frame-Options spune browserului dacă pagina ta poate fi pusă într-un iframe pe alt site.

Ce previne: Clickjacking.

Configurare:

X-Frame-Options: DENY

Opțiuni:

  • DENY — nimeni nu poate încadra site-ul (cea mai sigură opțiune)
  • SAMEORIGIN — doar propriul domeniu poate încadra paginile

Notă: Acest header este treptat înlocuit de directiva frame-ancestors din CSP, dar e bine să le ai pe ambele pentru compatibilitate.

4. X-Content-Type-Options — „Respectă Eticheta"

Analogia: Spui curierului: „Dacă pe colet scrie 'Cărți', tratează-l ca pe cărți. Nu deschide să verifici, nu ghici ce e înăuntru". Acest header oprește browserul din a „mirosi" tipul fișierelor.

Ce previne: MIME sniffing — executarea de cod malițios deghizat în alt tip de fișier.

Configurare:

X-Content-Type-Options: nosniff

Este cel mai simplu header — o singură valoare, fără opțiuni. Nu ai niciun motiv să nu-l activezi.

5. Referrer-Policy — „Ce Spui Următorului Magazin"

Analogia: Când pleci dintr-un magazin și intri în altul, vânzătorul te întreabă: „De unde vii?". Referrer-Policy controlează cât de multe informații spui: adresa completă, doar numele străzii sau „nu-ți spun".

Ce previne: Scurgerea de informații sensibile prin URL-uri (token-uri, ID-uri de sesiune).

Configurare recomandată:

Referrer-Policy: strict-origin-when-cross-origin

Ce face:

  • Către propriul site → trimite URL-ul complet
  • Către alte site-uri (HTTPS → HTTPS) → trimite doar domeniul (ex: https://site-ul-tau.ro)
  • De la HTTPS la HTTP → nu trimite nimic

6. Permissions-Policy — „Regulamentul Clădirii"

Analogia: La intrarea în clădire e un panou: „Nu se permite: filmarea, accesul cu animale, muzica tare". Permissions-Policy (fost Feature-Policy) spune browserului ce funcții hardware are voie să folosească site-ul: cameră, microfon, geolocalizare, etc.

Ce previne: Accesul neautorizat la resurse hardware ale utilizatorului.

Configurare recomandată:

Permissions-Policy: camera=(), microphone=(), geolocation=(), payment=(self)

Ce înseamnă:

  • camera=() — nimeni nu poate accesa camera (nici site-ul, nici iframe-urile)
  • microphone=() — nimeni nu poate accesa microfonul
  • geolocation=() — nimeni nu poate accesa locația
  • payment=(self) — doar site-ul tău poate folosi Payment API

Cum Verifici Ce Headere Ai Acum?

Există trei metode simple:

Metoda 1: SoftAudit.ro (Cea Mai Rapidă)

Accesează SoftAudit.ro/verificare-securitate, introdu URL-ul site-ului tău și primești un raport complet cu:

  • Ce headere ai configurate
  • Ce headere lipsesc
  • Scor de securitate
  • Recomandări specifice pentru site-ul tău

Metoda 2: SecurityHeaders.com

Instrumentul lui Scott Helme — securityheaders.com — oferă un scor de la A+ la F și detalii despre fiecare header.

Metoda 3: Chrome DevTools

  1. Deschide site-ul în Chrome
  2. Apasă F12 (sau Click dreapta → Inspect)
  3. Tab-ul Network
  4. Reîncarcă pagina (F5)
  5. Click pe prima cerere (numele domeniului)
  6. Secțiunea Response Headers — aici vezi toate headerele

Cum Le Configurezi — Ghid Pas cu Pas

Pentru Apache (.htaccess)

Adaugă în fișierul .htaccess din rădăcina site-ului:

# Security Headers
Header always set Strict-Transport-Security "max-age=31536000; includeSubDomains; preload"
Header always set X-Content-Type-Options "nosniff"
Header always set X-Frame-Options "DENY"
Header always set Referrer-Policy "strict-origin-when-cross-origin"
Header always set Permissions-Policy "camera=(), microphone=(), geolocation=()"
Header always set Content-Security-Policy "default-src 'self'; script-src 'self'; style-src 'self' 'unsafe-inline'; img-src 'self' data: https:; font-src 'self'; frame-ancestors 'none';"

Pentru Nginx

Adaugă în blocul server din configurarea Nginx:

add_header Strict-Transport-Security "max-age=31536000; includeSubDomains; preload" always;
add_header X-Content-Type-Options "nosniff" always;
add_header X-Frame-Options "DENY" always;
add_header Referrer-Policy "strict-origin-when-cross-origin" always;
add_header Permissions-Policy "camera=(), microphone=(), geolocation=()" always;
add_header Content-Security-Policy "default-src 'self'; script-src 'self'; style-src 'self' 'unsafe-inline'; img-src 'self' data: https:; font-src 'self'; frame-ancestors 'none';" always;

Pentru WordPress (Plugin)

Dacă nu ai acces la fișierele serverului:

  1. Instalează pluginul HTTP Headers sau Really Simple SSL (versiunea Pro)
  2. Accesează Settings → HTTP Headers
  3. Activează fiecare header din interfața grafică
  4. Salvează și verifică cu SoftAudit.ro

Pentru Cloudflare

Dacă folosești Cloudflare:

  1. Accesează Rules → Transform Rules → Modify Response Header
  2. Crează o regulă nouă pentru fiecare header
  3. Setează acțiunea pe „Set static" și completează valoarea

Notă: HSTS poate fi activat direct din Cloudflare: SSL/TLS → Edge Certificates → HSTS.

Greșeli Frecvente de Evitat

1. CSP Prea Restrictiv

Dacă activezi script-src 'self' dar folosești Google Analytics, Tag Manager sau alte scripturi externe, site-ul se va strica. Adaugă fiecare sursă externă în lista CSP.

2. HSTS Fără SSL Valid

Dacă activezi HSTS dar certificatul SSL expiră, utilizatorii nu vor putea accesa site-ul deloc — browserul refuză conexiunea HTTP și HTTPS-ul nu funcționează.

3. Uitarea Subdomeniilor

Ai configurat totul pe www.site.ro dar api.site.ro sau cdn.site.ro rămân neprotejate.

4. Testare Insuficientă

Activezi CSP fără să testezi — formulare care nu mai funcționează, imagini care nu se încarcă, fonturi care dispar.

Cât Durează Implementarea?

HeaderTimp EstimatDificultate
X-Content-Type-Options1 minutFoarte ușor
X-Frame-Options1 minutFoarte ușor
Referrer-Policy2 minuteUșor
Permissions-Policy5 minuteUșor
HSTS5 minuteMediu (necesită SSL)
CSP15-60 minuteMediu-Avansat

Total: Poți securiza un site simplu în sub 30 de minute. Un site complex (cu multe surse externe) poate necesita câteva ore pentru testarea CSP.

Verifică-ți Site-ul Gratuit

Nu trebuie să ne crezi pe cuvânt. Testează acum și vezi exact ce headere ai și ce îți lipsește:

Verifică Security Headers Gratuit

Raportul SoftAudit îți arată exact ce trebuie să adaugi, cu instrucțiuni specifice pentru configurația ta. Este gratuit, fără cont și durează sub 30 de secunde.

Concluzie

HTTP Security Headers sunt una dintre cele mai simple și eficiente măsuri de securitate pe care le poți implementa. Nu costă nimic, nu încetinesc site-ul și protejează împotriva unor atacuri foarte reale.

Gândește-te la ele ca la centura de siguranță — nu o porți pentru că te aștepți la un accident, ci pentru că e simplu de făcut și te protejează când ai mai mare nevoie.

Pașii următori:

  1. Verifică ce headere ai acum
  2. Adaugă headerele lipsă (începe cu cele simple: X-Content-Type-Options, X-Frame-Options)
  3. Testează CSP în modul Report-Only
  4. Reverifică scorul după implementare

Site-ul tău merită aceeași protecție pe care o dai casei tale. Iar headerele de securitate sunt încuietorile pe care nu le-ai pus încă.

Ți-a fost util acest articol? Distribuie-l și altora:

Distribuie

Articole recomandate

Verifică-ți website-ul gratuit

Rulează un audit complet — securitate, SEO, performanță, GDPR și accesibilitate — într-un singur click.

Auditează acum