Ce sunt headerele HTTP de securitate?
La fiecare cerere HTTP, serverul tău răspunde cu un set de headere — metadate care spun browserului cum să trateze conținutul primit. Pe lângă headerele tehnice obișnuite (Content-Type, Cache-Control etc.), există o serie de headere dedicate exclusiv securității.
Aceste headere sunt gratuite de activat (nu necesită software suplimentar) și pot bloca automat clase întregi de atacuri înainte ca ele să afecteze utilizatorul.
Principalele headere de securitate analizate de SecureCheck:
- Content-Security-Policy (CSP)
- X-Frame-Options
- X-Content-Type-Options
- Strict-Transport-Security (HSTS)
- Referrer-Policy
- Permissions-Policy
De ce contează?
Content-Security-Policy (CSP) — Specifică din ce surse browserul poate încărca scripturi, stiluri, imagini etc. Blochează atacurile Cross-Site Scripting (XSS), una dintre cele mai frecvente vulnerabilități web.
X-Frame-Options — Previne clickjacking: atacul prin care site-ul tău este încorporat invizibil într-o pagină malițioasă pentru a înșela utilizatorii să dea click pe butoane fără să știe.
X-Content-Type-Options: nosniff — Împiedică browserul să „ghicească" tipul unui fișier dacă serverul declară altceva. Blochează atacuri prin fișiere malițioase deghizate.
HSTS — Forțează browserul să folosească exclusiv HTTPS pentru domeniu, eliminând posibilitatea atacurilor de downgrade la HTTP.
Referrer-Policy — Controlează ce informații despre URL-ul sursă sunt trimise altor site-uri. Protejează confidențialitatea utilizatorilor și datele sensibile din URL-uri.
Cum verifici?
SecureCheck face o cerere HTTP la domeniul tău și analizează headerele răspunsului. Verifică prezența și configurarea corectă a fiecărui header de mai sus.
Poți verifica și manual:
- Browser DevTools → Tab Network → click pe prima cerere → Headers → Response Headers
- Online: securityheaders.com — oferă un scor și recomandări detaliate
- curl:
curl -I https://domeniu.ro
Cum remediezi?
Adaugă headerele în configurația serverului tău web. Exemple pentru nginx:
add_header X-Frame-Options "SAMEORIGIN" always;
add_header X-Content-Type-Options "nosniff" always;
add_header Referrer-Policy "strict-origin-when-cross-origin" always;
add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" 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';" always;
Pentru Apache (în .htaccess sau httpd.conf):
Header always set X-Frame-Options "SAMEORIGIN"
Header always set X-Content-Type-Options "nosniff"
Header always set Referrer-Policy "strict-origin-when-cross-origin"
Header always set Strict-Transport-Security "max-age=31536000; includeSubDomains"
Atenție la CSP: o politică prea strictă poate sparge funcționalități ale site-ului (scripturi third-party, fonturi, analytics). Testează întotdeauna în modul Content-Security-Policy-Report-Only înainte de a activa.
Headerele HTTP nu au putut fi verificate
SecureCheck nu a primit un răspuns HTTP de la domeniul tău. Serverul poate fi oprit, portul 80/443 poate fi blocat de firewall sau domeniul nu rezolvă corect.
Fără un răspuns HTTP verificabil, nu putem evalua securitatea site-ului tău — iar vizitatorii probabil nu pot accesa site-ul deloc.
Cum remediezi:
- Verifică că site-ul este accesibil:
curl -I https://domeniu.ro - Verifică firewall-ul serverului: porturile 80 și 443 trebuie să fie deschise în regula de inbound
- Verifică că serviciul web (nginx/Apache) rulează:
systemctl status nginx
Verificare: curl -I https://domeniu.ro — trebuie să returneze HTTP/2 200 sau 301
HSTS lipsă
Serverul tău nu trimite headerul Strict-Transport-Security. Fără HSTS, browserele nu știu că trebuie să folosească HTTPS exclusiv, lăsând o fereastră de atac pentru downgrade la HTTP.
Atacurile SSL stripping pot intercepta prima conexiune HTTP înainte de redirect, capturând datele utilizatorilor.
Cum remediezi:
- Nginx — în blocul
serverHTTPS:add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always; - Apache — în VirtualHost HTTPS sau
.htaccess:Header always set Strict-Transport-Security "max-age=31536000; includeSubDomains" - Asigură-te că ai HTTPS funcțional înainte — HSTS pe un site fără HTTPS valid blochează accesul
Verificare: curl -I https://domeniu.ro | grep Strict — trebuie să afișeze headerul HSTS
X-Frame-Options lipsă
Site-ul tău poate fi încărcat în <iframe> de orice alt site. Aceasta permite atacuri de tip clickjacking: un site malițios îți suprapune site-ul invizibil și manipulează clicurile utilizatorilor pentru a efectua acțiuni nedorite.
Clickjacking-ul poate fi folosit pentru a fura autentificări, a autoriza tranzacții sau a colecta date sensibile.
Cum remediezi:
- Nginx:
add_header X-Frame-Options "SAMEORIGIN" always; - Apache:
Header always set X-Frame-Options "SAMEORIGIN" - Alternativă modernă prin CSP:
Content-Security-Policy: frame-ancestors 'self';(supersedează X-Frame-Options)
Verificare: curl -I https://domeniu.ro | grep -i frame
Content-Security-Policy lipsă
Site-ul tău nu are o politică Content-Security-Policy (CSP). Fără CSP, atacurile XSS (Cross-Site Scripting) pot injecta scripturi malițioase care rulează în browserul vizitatorilor, furtând sesiuni, date sau redirecționând utilizatori.
CSP este una dintre cele mai eficiente apărări împotriva XSS și a injecțiilor de conținut terț neautorizat.
Cum remediezi:
- Testează mai întâi în modul raport:
Content-Security-Policy-Report-Only: default-src 'self'; report-uri /csp-report - Analizează rapoartele, identifică sursele legitime și construiește politica
- Activează politica reală:
Content-Security-Policy: default-src 'self'; script-src 'self' 'nonce-...'; ...
Verificare: CSP Evaluator by Google — analizează politica ta
CSP în modul raport — neimpus
Site-ul tău trimite headerul Content-Security-Policy-Report-Only în loc de Content-Security-Policy. Încălcările politicii sunt raportate, dar nu blocate — scripturile malițioase pot rula nestingherite.
Modul Report-Only este util pentru testare, dar nu oferă nicio protecție reală în producție.
Cum remediezi:
- Analizează rapoartele existente pentru a înțelege ce surse sunt blocate
- Ajustează politica pentru a permite sursele legitime (analytics, CDN, fonturi)
- Schimbă headerul din
Content-Security-Policy-Report-OnlyînContent-Security-Policy
Verificare: curl -I https://domeniu.ro | grep -i content-security — trebuie să apară Content-Security-Policy: fără „Report-Only"
X-Content-Type-Options lipsă
Headerul X-Content-Type-Options: nosniff lipsește. Fără el, browserele pot „ghici" tipul unui fișier (MIME sniffing), executând conținut HTML sau JavaScript dintr-un fișier declarat ca imagine sau text.
Atacatorii pot exploata acest comportament pentru a rula scripturi malițioase prin fișiere aparent inofensive.
Cum remediezi:
- Nginx:
add_header X-Content-Type-Options "nosniff" always; - Apache:
Header always set X-Content-Type-Options "nosniff" - Este o modificare de o singură linie, fără efecte secundare — poate fi aplicată imediat
Verificare: curl -I https://domeniu.ro | grep -i content-type-options
Referrer-Policy lipsă
Site-ul tău nu trimite un header Referrer-Policy. Implicit, browserele pot trimite URL-ul complet al paginii curente (inclusiv parametri, tokeni sau date sensibile) ca header Referer la navigarea spre alte site-uri.
URL-uri de forma https://domeniu.ro/reset?token=abc123 pot fi expuse în log-urile site-urilor terțe sau interceptate prin analytics.
Cum remediezi:
- Nginx:
add_header Referrer-Policy "strict-origin-when-cross-origin" always; - Apache:
Header always set Referrer-Policy "strict-origin-when-cross-origin" strict-origin-when-cross-origineste valoarea recomandată: trimite originea pentru navigare cross-origin, URL complet pentru same-origin
Verificare: curl -I https://domeniu.ro | grep -i referrer