HSTS și headere de securitate pentru site-ul dumneavoastră
La fiecare pagină, serverul dumneavoastră web trimite și headere: rânduri scurte cu instrucțiuni pentru browser. Acestea determină în parte cât de sigur tratează browserul site-ul dumneavoastră. Aici aflați ce este HSTS, ce alte headere de securitate există și cum le configurați și testați.
Mai întâi, site-ul dumneavoastră trebuie să aibă un certificat funcțional și să redirecționeze vizitatorii către https. Detalii găsiți în Activarea și reînnoirea certificatului SSL și rezolvarea problemelor și Redirecționarea obligatorie a vizitatorilor către https.
Ce face HSTS?
Redirecționarea către https are un singur moment vulnerabil: prima cerere prin http este trimisă încă necriptat. Cineva din aceeași rețea, de exemplu pe o rețea wifi publică, poate intercepta acea cerere. HSTS (HTTP Strict Transport Security) rezolvă această problemă. Site-ul dumneavoastră trimite prin https acest header:
Strict-Transport-Security: max-age=31536000
Browserul reține apoi că poate deschide site-ul dumneavoastră doar prin https. Dacă un vizitator tastează ulterior http://, browserul îl transformă singur în https, înainte ca ceva să fie trimis prin rețea. Un header HSTS primit prin http simplu este ignorat de browser.
| Componentă | Semnificație |
|---|---|
max-age | Cât timp reține browserul instrucțiunea, în secunde. Testul internet.nl consideră suficientă o valoare de cel puțin un an (31536000). |
includeSubDomains | Se aplică și tuturor subdomeniilor, precum shop.domeniuldvs.ro și mail.domeniuldvs.ro. |
preload | Solicitați includerea în lista integrată în browsere (hstspreload.org). Astfel, chiar și prima vizită este protejată. Pentru aceasta sunt necesare, printre altele, un an, includeSubDomains și https pe toate subdomeniile. Eliminarea din listă durează mult. |
max-age=0 | Șterge instrucțiunea reținută, la următoarea vizită prin https. |
includeSubDomains, acest lucru este valabil și pentru fiecare subdomeniu, de exemplu o pagină veche a unei camere sau a unei imprimante fără certificat. Prin urmare, procedați treptat: începeți cu un max-age scurt, de exemplu o zi (86400), verificați dacă totul funcționează și creșteți valoarea în etape până la un an.HSTS la WebOké
Pe majoritatea serverelor noastre, serverul web trimite implicit HSTS pentru fiecare site deschis prin https: Strict-Transport-Security: max-age=31536000. Aceasta înseamnă un an, fără includeSubDomains și fără preload. Pentru aceasta nu trebuie să faceți nimic. Pe câteva servere, opțiunea nu este activată implicit; acolo o activați dumneavoastră. Dacă site-ul dumneavoastră trimite deja HSTS și cu ce valoare max-age puteți vedea în instrumentele pentru dezvoltatori ale browserului sau în testul internet.nl (vedeți mai jos).
Comutatorul HSTS din DirectAdmin
În DirectAdmin, accesați Domains și faceți clic pe numele domeniului dumneavoastră. Dacă opțiunea Secure SSL este activată, la HSTS vedeți comutatorul Enable HTTP Strict Transport Security. Apoi faceți clic pe Edit pentru a salva. Pașii detaliați îi găsiți în Redirecționarea permanentă a vizitatorilor către https.
Dacă site-ul dumneavoastră trimite deja HSTS, nu aveți nevoie de comutator. Activați-l doar dacă site-ul nu trimite încă HSTS. Configurați HSTS într-un singur loc: în DirectAdmin sau în .htaccess, nu în ambele. Dacă browserul primește două headere HSTS, îl folosește doar pe primul.
Celelalte headere de securitate
| Header | Împotriva a ce protejează | Valoare de pornire |
|---|---|---|
X-Content-Type-Options | Browserul ghicește singur ce tip are un fișier, astfel încât o „imagine” încărcată poate fi executată ca script. | nosniff (singura valoare validă) |
Content-Security-Policy: frame-ancestors sau X-Frame-Options | Clickjacking: un alt site încarcă invizibil pagina dumneavoastră într-un frame, astfel încât vizitatorii fac clic pe butoanele dumneavoastră fără să își dea seama. | frame-ancestors 'self' sau headerul mai vechi X-Frame-Options: SAMEORIGIN |
Referrer-Policy | La un clic către alt site, browserul trimite adresa paginii anterioare, uneori cu un termen de căutare sau un număr de comandă în ea. | strict-origin-when-cross-origin sau, mai strict, same-origin ori no-referrer. Internet.nl consideră corecte doar valorile stricte. |
Permissions-Policy | Stabilește ce funcții ale browserului pot folosi pagina dumneavoastră și frame-urile încorporate, precum camera, microfonul și localizarea. | camera=(), microphone=(), geolocation=() dezactivează aceste trei funcții. Dacă site-ul dumneavoastră folosește una dintre ele, eliminați-o din listă. |
Content-Security-Policy (complet) | Limitează locurile din care se pot încărca scripturi, stiluri și imagini. Astfel, scripturile rău intenționate injectate (XSS) devin mult mai dificil de folosit. | Personalizat pentru fiecare site. Evitați unsafe-inline, unsafe-eval și wildcard-urile. |
Configurarea în .htaccess
Adăugați aceste rânduri la începutul fișierului .htaccess din folderul public_html al domeniului dumneavoastră. Faceți mai întâi o copie a fișierului.
<IfModule mod_headers.c> Header always set X-Content-Type-Options "nosniff" Header always set Content-Security-Policy "frame-ancestors 'self'" Header always set Referrer-Policy "strict-origin-when-cross-origin" Header always set Permissions-Policy "camera=(), microphone=(), geolocation=()" # Doar dacă site-ul dumneavoastră nu trimite încă HSTS (vedeți mai sus): # Header always set Strict-Transport-Security "max-age=31536000" </IfModule>
Adăugați includeSubDomains doar când sunteți sigur că fiecare subdomeniu are https. Dacă folosiți WordPress, puteți configura headerele și cu un plugin. Alegeți un plugin cunoscut care este încă actualizat și configurați fiecare header într-un singur loc: în plugin sau în .htaccess.
Content-Security-Policy-Report-Only. Acesta nu blochează nimic, dar arată în consola browserului ce ar fi blocat. Dacă aveți îndoieli, lăsați această sarcină dezvoltatorului dumneavoastră web sau începeți doar cu frame-ancestors.Pe un VPS cu nginx sau Caddy
Pe un VPS nu folosiți DirectAdmin și adesea nici .htaccess. În acest caz, adăugați headerele în configurația serverului dumneavoastră web. Niciunul dintre cele două nu trimite automat HSTS sau aceste headere.
nginx: în blocul server pentru portul 443:
add_header Strict-Transport-Security "max-age=31536000" always; add_header X-Content-Type-Options "nosniff" always; add_header Content-Security-Policy "frame-ancestors 'self'" always; add_header Referrer-Policy "strict-origin-when-cross-origin" always;
Cu always, headerele sunt trimise și la paginile de eroare. Atenție: dacă un bloc location conține el însuși un add_header, regulile din blocul server nu se mai aplică acelui location. Repetați-le acolo sau puneți-le într-un fișier separat pe care îl inserați peste tot cu include. Testați configurația cu nginx -t și încărcați-o cu systemctl reload nginx.
Caddy: în blocul site-ului dumneavoastră din Caddyfile:
header {
Strict-Transport-Security "max-age=31536000"
X-Content-Type-Options "nosniff"
Content-Security-Policy "frame-ancestors 'self'"
Referrer-Policy "strict-origin-when-cross-origin"
}
Încărcați modificarea cu systemctl reload caddy. Pentru configurarea unui site cu nginx sau Caddy, consultați nginx cu un certificat Let's Encrypt și Caddy: un site cu https automat din ghidul VPS.
Testarea
- Internet.nl: introduceți domeniul dumneavoastră în testul pentru site-uri de pe internet.nl.
- Browserul dumneavoastră: deschideți site-ul, apăsați F12 (sau alegeți Inspectați), accesați fila Rețea, reîncărcați pagina și faceți clic pe prima cerere. La Anteturi de răspuns (Response Headers) vedeți tot ce trimite serverul dumneavoastră.
- Linia de comandă:
curl -sI https://domeniuldvs.ro/afișează headerele.
După fiecare modificare, verificați dacă site-ul, formularele și pagina de plată funcționează în continuare. În plus, mențineți actualizate CMS-ul, pluginurile și temele. Consultați Securizarea wp-login.php din WordPress.
Lectură suplimentară
- MDN: Strict-Transport-Security (în engleză)
- MDN: Content-Security-Policy (în engleză)
- MDN: Permissions-Policy (în engleză)
- Lista de preîncărcare HSTS (în engleză)
Doriți să aflați mai multe? Urmați cursul gratuit Siguranță online pentru antreprenori, lecția 4.2 Site-ul dumneavoastră: https, HSTS și headere de securitate, sau cursul gratuit de WordPress, lecția 7.4 Securizarea site-ului: permisiuni, headere și pluginuri de securitate.
