HSTS și headere de securitate pentru website-ul dumneavoastră
La fiecare pagină, serverul dumneavoastră web trimite headere: linii scurte cu instrucțiuni pentru browser. Acestea determină, parțial, cât de sigur gestionează browserul site-ul dumneavoastră. Aici aflați ce este HSTS, ce alte headere de securitate există și cum le configurați și le testați.
Mai întâi, site-ul dumneavoastră trebuie să aibă un certificat funcțional și să trimită vizitatorii către https. Despre aceasta citiți în Activarea, reînnoirea și rezolvarea problemelor certificatului SSL și Redirecționarea obligatorie a vizitatorilor către https.
Ce face HSTS?
Redirecționarea către https are un moment vulnerabil: prima cerere prin http este încă necriptată. Cineva aflat în aceeași rețea, de exemplu pe o rețea wifi publică, poate intercepta această 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 atunci că trebuie să deschidă site-ul dumneavoastră doar prin https. Dacă un vizitator introduce ulterior http://, browserul îl transformă automat în https, chiar înainte ca ceva să fie trimis prin rețea. Un header HSTS primit prin http obișnuit este ignorat de browser.
| Componentă | Semnificație |
|---|---|
max-age | Durata de timp cât browserul reține informația, în secunde. Testul de pe internet.nl consideră cel puțin un an (31536000) ca fiind suficient. |
includeSubDomains | Se aplică și tuturor subdomeniilor, precum shop.domeniulvostru.ro și mail.domeniulvostru.ro. |
preload | Solicitați includerea în lista care este 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. Scoaterea din listă durează mult timp. |
max-age=0 | Șterge instrucțiunea reținută, la următoarea vizită prin https. |
includeSubDomains, aceasta se aplică și fiecărui subdomeniu, de exemplu o pagină veche de cameră sau imprimantă fără certificat. De aceea, construiți treptat: începeți cu o valoare scurtă max-age, de exemplu o zi (86400), verificați dacă totul funcționează și creșteți în etape până la un an.Comutatorul HSTS în DirectAdmin
În DirectAdmin, mergeți la Domenii și faceți clic pe numele domeniului dumneavoastră. Dacă Conexiune SSL securizată este activată, veți vedea la HSTS comutatorul Activare HTTP Strict Transport Security. Apoi faceți clic pe Editare pentru a salva. Pentru instrucțiuni pas cu pas, citiți Redirecționarea permanentă a vizitatorilor către https.
Dacă doriți să știți ce max-age trimite site-ul dumneavoastră, verificați în instrumentele pentru dezvoltatori ale browserului sau în testul de pe internet.nl (vedeți mai jos). Configurați HSTS într-un singur loc: în DirectAdmin sau în .htaccess, nu în ambele. Dacă browserul primește două headere HSTS, va folosi doar primul.
Celelalte headere de securitate
| Header | Împotriva a ce | Valoare de început |
|---|---|---|
X-Content-Type-Options | Browserul încearcă să ghicească singur ce tip de fișier este, 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 dau clic pe butoanele dumneavoastră fără să observe. | frame-ancestors 'self', sau headerul mai vechi X-Frame-Options: SAMEORIGIN |
Referrer-Policy | La un clic către un alt site, browserul trimite adresa paginii anterioare, uneori cu un termen de căutare sau un număr de comandă inclus. | strict-origin-when-cross-origin, sau mai strict same-origin ori no-referrer. Internet.nl consideră corecte doar valorile stricte. |
Permissions-Policy | Determină ce funcții ale browserului pot folosi pagina dumneavoastră și frame-urile încorporate, precum camera, microfonul și locația. | camera=(), microphone=(), geolocation=() dezactivează aceste trei funcții. Dacă site-ul dumneavoastră folosește una dintre aceste funcții, omiteți-o. |
Content-Security-Policy (complet) | Limitează locurile de unde se pot încărca scripturi, stiluri și imagini. Aceasta îngreunează considerabil inserarea de scripturi malițioase (XSS). | Personalizat pentru fiecare site. Evitați unsafe-inline, unsafe-eval și wildcard-uri. |
Configurare în .htaccess
Adăugați aceste linii la începutul fișierului .htaccess din directorul public_html al domeniului dumneavoastră. Mai întâi faceț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ă comutatorul HSTS din DirectAdmin este dezactivat: # Header always set Strict-Transport-Security "max-age=31536000" </IfModule>
Adăugați includeSubDomains doar atunci când sunteți sigur că fiecare subdomeniu are https. Dacă folosiți WordPress, puteți configura headerele și cu ajutorul unui 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 fost blocat. În caz de incertitudine, lăsați aceasta în seama dezvoltatorului dumneavoastră web, sau începeți doar cu frame-ancestors.Testare
- Internet.nl: introduceți domeniul dumneavoastră în testul de site de pe internet.nl.
- Browserul dumneavoastră: deschideți site-ul, apăsați F12 (sau alegeți Inspectare), mergeți la fila Rețea (Network), reîncărcați pagina și faceți clic pe prima cerere. Sub Headere de răspuns (Response Headers) veți vedea tot ce trimite serverul dumneavoastră.
- Linia de comandă:
curl -sI https://domeniulvostru.ro/afișează headerele.
După fiecare modificare, verificați dacă site-ul, formularele și pagina de plată funcționează în continuare. De asemenea, mențineți actualizate CMS-ul, pluginurile și temele dumneavoastră. Consultați Securizarea wp-login.php în WordPress.
Lectură suplimentară
- MDN: Strict-Transport-Security (în limba engleză)
- MDN: Content-Security-Policy (în limba engleză)
- MDN: Permissions-Policy (în limba engleză)
- Lista de preîncărcare HSTS (în limba engleză)
