HSTS i sigurnosna zaglavlja za Vašu web stranicu
Uz svaku stranicu Vaš webposlužitelj šalje zaglavlja (headers): kratke retke s uputama za preglednik. Ona dijelom određuju koliko sigurno preglednik postupa s Vašom stranicom. Ovdje saznajete što je HSTS, koja druga sigurnosna zaglavlja postoje te kako ih postaviti i testirati.
Najprije Vaša stranica mora imati ispravan certifikat i preusmjeravati posjetitelje na https. O tome čitajte u člancima Aktiviranje, obnavljanje SSL certifikata i rješavanje problema i Obvezno preusmjeravanje posjetitelja na https.
Što radi HSTS?
Preusmjeravanje na https ima jedan slab trenutak: prvi zahtjev putem http i dalje je nešifriran. Netko na istoj mreži, primjerice na javnom wifiju, može taj zahtjev presresti. HSTS (HTTP Strict Transport Security) rješava taj problem. Vaša stranica putem https šalje ovo zaglavlje:
Strict-Transport-Security: max-age=31536000
Preglednik tada zapamti da smije otvarati Vašu stranicu isključivo putem https. Ako posjetitelj kasnije upiše http://, preglednik to sam pretvara u https, i to prije nego što bilo što ode preko mreže. HSTS zaglavlje koje stigne putem običnog http preglednik zanemaruje.
| Dio | Značenje |
|---|---|
max-age | Koliko dugo preglednik to pamti, u sekundama. Test na internet.nl smatra barem godinu dana (31536000) dovoljnim. |
includeSubDomains | Vrijedi i za sve poddomene, poput shop.vašadomena.nl i mail.vašadomena.nl. |
preload | Time tražite uvrštavanje na popis ugrađen u preglednike (hstspreload.org). Tako je zaštićen čak i baš prvi posjet. Za to su potrebni, između ostalog, godina dana, includeSubDomains i https na svim poddomenama. Ponovno uklanjanje s popisa traje dugo. |
max-age=0 | Briše zapamćenu uputu kod sljedećeg posjeta putem https. |
includeSubDomains to vrijedi i za svaku poddomenu, poput stare stranice kamere ili pisača bez certifikata. Zato gradite postupno: počnite s kratkim max-age, primjerice jedan dan (86400), provjerite radi li sve ispravno i u koracima povećavajte prema jednoj godini.HSTS kod WebOké
Na većini naših poslužitelja webposlužitelj standardno šalje HSTS za svaku web stranicu koja se otvara putem https: Strict-Transport-Security: max-age=31536000. To je jedna godina, bez includeSubDomains i bez preload. Za to ništa ne morate poduzeti. Na nekoliko poslužitelja to nije standardno uključeno; ondje to sami uključujete. Šalje li Vaša stranica već HSTS i s kojim max-age, vidite u razvojnim alatima Vašeg preglednika ili u testu na internet.nl (vidi dolje).
HSTS prekidač u DirectAdmin
U DirectAdmin odete na Domains i kliknete na naziv domene. Ako je uključeno Secure SSL Connection, kod HSTS vidite prekidač Enable HTTP Strict Transport Security. Zatim kliknite na Modify kako biste spremili postavke. Korak po korak postupak pročitajte u članku Uvijek preusmjeravanje posjetitelja na https.
Ako Vaša stranica već šalje HSTS, prekidač Vam nije potreban. Uključite ga samo ako Vaša stranica još ne šalje HSTS. HSTS postavite na jednom mjestu: u DirectAdmin ili u datoteci .htaccess, nikad na oba mjesta istovremeno. Primi li preglednik dva HSTS zaglavlja, koristi samo prvo.
Ostala sigurnosna zaglavlja
| Zaglavlje | Protiv čega | Vrijednost za početak |
|---|---|---|
X-Content-Type-Options | Preglednik sam pokušava pogoditi vrstu datoteke, zbog čega se učitana "slika" može izvršiti kao skripta. | nosniff (jedina ispravna vrijednost) |
Content-Security-Policy: frame-ancestors ili X-Frame-Options | Clickjacking: druga stranica nevidljivo učitava Vašu stranicu unutar okvira, tako da posjetitelji neopaženo klikaju na Vaše gumbe. | frame-ancestors 'self', ili starije zaglavlje X-Frame-Options: SAMEORIGIN |
Referrer-Policy | Kod klika prema drugoj stranici preglednik šalje adresu prethodne stranice, ponekad uključujući pojam pretrage ili broj narudžbe. | strict-origin-when-cross-origin, ili strože same-origin ili no-referrer. Internet.nl kao ispravnima smatra samo strože vrijednosti. |
Permissions-Policy | Određuje koje funkcije preglednika Vaša stranica i ugrađeni okviri smiju koristiti, poput kamere, mikrofona i lokacije. | camera=(), microphone=(), geolocation=() isključuje te tri funkcije. Koristi li Vaša stranica neku od njih, izostavite je. |
Content-Security-Policy (potpuna) | Ograničava s kojih mjesta se smiju učitavati skripte, stilovi i slike. Time se umetanje zlonamjernih skripti (XSS) znatno otežava. | Prilagođeno svakoj stranici posebno. Izbjegavajte unsafe-inline, unsafe-eval i zamjenske znakove (wildcards). |
Postavljanje u .htaccess
Dodajte ove retke na vrh datoteke .htaccess u mapi public_html Vaše domene. Prije toga napravite kopiju datoteke.
<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=()" # Samo ako Vaša stranica još ne šalje HSTS (vidi gore): # Header always set Strict-Transport-Security "max-age=31536000" </IfModule>
Dodajte includeSubDomains tek kada ste sigurni da svaka poddomena ima https. Koristite li WordPress, zaglavlja možete postaviti i putem dodatka (plugin). Odaberite poznati dodatak koji se i dalje redovito ažurira, te svako zaglavlje postavite na jednom mjestu: u dodatku ili u datoteci .htaccess.
Content-Security-Policy-Report-Only. Ono ništa ne blokira, ali u konzoli preglednika prikazuje što bi bilo blokirano. U slučaju sumnje prepustite to svom izrađivaču web stranica, ili počnite samo s postavkom frame-ancestors.Testiranje
- Internet.nl: unesite svoju domenu u test web stranice na internet.nl.
- Vaš preglednik: otvorite svoju stranicu, pritisnite F12 (ili odaberite Inspect), idite na karticu Network, ponovno učitajte stranicu i kliknite na prvi zahtjev. Pod Response Headers vidite sve što Vaš poslužitelj šalje.
- Naredbeni redak:
curl -sI https://vašadomena.nl/prikazuje zaglavlja.
Nakon svake izmjene provjerite rade li Vaša stranica, obrasci i stranica za plaćanje i dalje ispravno. Osim toga, redovito ažurirajte svoj CMS, dodatke i teme. Pogledajte Zaštita wp-login.php datoteke u WordPressu.
Dodatno čitanje
- MDN: Strict-Transport-Security (engleski)
- MDN: Content-Security-Policy (engleski)
- MDN: Permissions-Policy (engleski)
- HSTS popis za unaprijed učitavanje (preload) (engleski)
