HSTS és biztonsági fejlécek a weboldalához
A webszerver minden oldallal együtt fejléceket (headers) is küld: rövid sorokat, amelyek utasításokat adnak a böngészőnek. Részben ezek határozzák meg, mennyire biztonságosan kezeli a böngésző az Ön webhelyét. Ebben a cikkben megtudhatja, mi az a HSTS, milyen más biztonsági fejlécek léteznek, és hogyan állíthatja be és tesztelheti őket.
Először webhelyének működő tanúsítvánnyal kell rendelkeznie, és a látogatókat https-re kell irányítania. Erről az SSL-tanúsítvány aktiválása, megújítása és hibaelhárítása és a Látogatók kötelező átirányítása https-re című cikkekben olvashat.
Mit csinál a HSTS?
A https-re történő átirányításnak van egy gyenge pontja: az első, http-n keresztüli kérés még titkosítatlanul megy át. Valaki ugyanazon a hálózaton, például egy nyilvános wifin, elfoghatja ezt a kérést. A HSTS (HTTP Strict Transport Security) ezt oldja meg. Webhelye https-en keresztül a következő fejlécet küldi:
Strict-Transport-Security: max-age=31536000
A böngésző ezután megjegyzi, hogy webhelyét csak https-en keresztül nyithatja meg. Ha egy látogató később http://-t ír be, a böngésző maga alakítja át https-re, még mielőtt bármi a hálózatra kerülne. A sima http-n keresztül érkező HSTS-fejlécet a böngésző figyelmen kívül hagyja.
| Elem | Jelentés |
|---|---|
max-age | Mennyi ideig jegyzi meg a böngésző, másodpercben. Az internet.nl tesztje legalább egy évet (31536000) tekint elegendőnek. |
includeSubDomains | Az összes aldomainre is vonatkozik, például a shop.sajatdomain.hu és a mail.sajatdomain.hu címre. |
preload | Kéri a felvételt a böngészőkbe beépített listára (hstspreload.org). Ekkor már a legelső látogatás is védett. Ehhez többek között egy év, includeSubDomains és minden aldomainen működő https szükséges. A listáról való lekerülés sokáig tart. |
max-age=0 | Törli a megjegyzett utasítást a következő, https-en keresztüli látogatáskor. |
includeSubDomains használatakor ez minden aldomainre is érvényes, például egy régi, tanúsítvány nélküli kamera- vagy nyomtatóoldalra. Ezért fokozatosan vezesse be: kezdjen rövid max-age értékkel, például egy nappal (86400), ellenőrizze, hogy minden működik-e, majd lépésenként növelje egy évre.HSTS a WebOké-nál
Legtöbb szerverünkön a webszerver alapértelmezetten küldi a HSTS-t minden https-en keresztül megnyitott webhelyhez: Strict-Transport-Security: max-age=31536000. Ez egy év, includeSubDomains és preload nélkül. Ehhez Önnek semmit sem kell tennie. Néhány szerveren ez alapértelmezetten nincs bekapcsolva; ott Önnek kell bekapcsolnia. Azt, hogy webhelye küldi-e már a HSTS-t, és milyen max-age értékkel, a böngésző fejlesztői eszközeiben vagy az internet.nl tesztjében láthatja (lásd alább).
A HSTS-kapcsoló a DirectAdminban
A DirectAdminban lépjen a Domain Setup menüpontra, és kattintson a domainnevére. Ha a Secure SSL be van kapcsolva, a HSTS-nél megjelenik az Enable HTTP Strict Transport Security kapcsoló. Ezután a mentéshez kattintson a Save gombra. A lépésenkénti leírást a Látogatók átirányítása mindig https-re című cikkben találja.
Ha webhelye már küldi a HSTS-t, nincs szüksége a kapcsolóra. Csak akkor kapcsolja be, ha webhelye még nem küld HSTS-t. A HSTS-t egy helyen állítsa be: a DirectAdminban vagy a .htaccess fájlban, ne mindkettőben. Ha a böngésző két HSTS-fejlécet kap, csak az elsőt használja.
A többi biztonsági fejléc
| Fejléc | Mi ellen véd | Kezdő érték |
|---|---|---|
X-Content-Type-Options | A böngésző maga próbálja kitalálni, milyen fájlról van szó, így egy feltöltött „kép” szkriptként futhat le. | nosniff (az egyetlen érvényes érték) |
Content-Security-Policy: frame-ancestors vagy X-Frame-Options | Clickjacking: egy másik webhely láthatatlanul betölti az Ön oldalát egy keretbe, így a látogatók észrevétlenül az Ön gombjaira kattintanak. | frame-ancestors 'self', vagy a régebbi X-Frame-Options: SAMEORIGIN fejléc |
Referrer-Policy | Egy másik webhelyre mutató kattintáskor a böngésző elküldi az előző oldal címét, néha benne egy keresőkifejezéssel vagy rendelésszámmal. | strict-origin-when-cross-origin, vagy szigorúbban same-origin vagy no-referrer. Az internet.nl csak a szigorú értékeket tekinti megfelelőnek. |
Permissions-Policy | Meghatározza, hogy oldala és a beágyazott keretek mely böngészőfunkciókat használhatják, például a kamerát, a mikrofont és a helymeghatározást. | A camera=(), microphone=(), geolocation=() kikapcsolja ezt a hármat. Ha webhelye ezek közül valamelyiket használja, hagyja ki. |
Content-Security-Policy (teljes) | Korlátozza, honnan tölthetők be szkriptek, stílusok és képek. Ez jelentősen megnehezíti a beszúrt kártékony szkripteket (XSS). | Webhelyenként egyedi. Kerülje az unsafe-inline, az unsafe-eval és a helyettesítő karakterek használatát. |
Beállítás a .htaccess fájlban
Helyezze ezeket a sorokat a domainje public_html mappájában található .htaccess fájl elejére. Előtte készítsen másolatot a fájlról.
<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=()" # Csak ha webhelye még nem küld HSTS-t (lásd fent): # Header always set Strict-Transport-Security "max-age=31536000" </IfModule>
Az includeSubDomains értéket csak akkor adja hozzá, ha biztos benne, hogy minden aldomain rendelkezik https-sel. Ha WordPresst használ, a fejléceket bővítménnyel is beállíthatja. Válasszon ismert, még frissített bővítményt, és minden fejlécet egy helyen állítson be: a bővítményben vagy a .htaccess fájlban.
Content-Security-Policy-Report-Only fejléccel. Ez semmit sem blokkol, de a böngésző konzolján megmutatja, mi kerülne blokkolásra. Kétség esetén bízza ezt webfejlesztőjére, vagy kezdje csak a frame-ancestors beállítással.VPS-en nginx vagy Caddy használatával
VPS-en nem DirectAdmint használ, és gyakran .htaccess fájlt sem. Ilyenkor a fejléceket a webszerver beállításaiban adja meg. Egyik sem küldi automatikusan a HSTS-t vagy ezeket a fejléceket.
nginx: a 443-as port server blokkjában:
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;
Az always használatával a fejlécek a hibaoldalakon is elküldésre kerülnek. Figyelem: ha egy location blokkban saját add_header szerepel, a server blokk szabályai arra a location-re már nem érvényesek. Ilyenkor ismételje meg ott őket, vagy tegye őket külön fájlba, amelyet include segítségével mindenhol beilleszt. Tesztelje a beállításokat az nginx -t paranccsal, és töltse be őket a systemctl reload nginx paranccsal.
Caddy: a webhelye blokkjában a Caddyfile fájlban:
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"
}
A módosítást a systemctl reload caddy paranccsal töltse be. Egy nginx vagy Caddy alapú webhely felépítéséhez lásd a VPS-útmutató nginx Let's Encrypt tanúsítvánnyal és Caddy: webhely automatikus https-sel című részeit.
Tesztelés
- Internet.nl: adja meg domainjét a webhelyteszthez az internet.nl oldalon.
- A böngészője: nyissa meg webhelyét, nyomja meg az F12 billentyűt (vagy válassza a Vizsgálat lehetőséget), lépjen a Hálózat fülre, töltse be újra az oldalt, és kattintson az első kérésre. A Válaszfejlécek (Response Headers) alatt mindent lát, amit szervere küld.
- A parancssor: a
curl -sI https://sajatdomain.hu/parancs megjeleníti a fejléceket.
Minden módosítás után ellenőrizze, hogy webhelye, űrlapjai és fizetési oldala továbbra is működnek-e. Emellett tartsa naprakészen a CMS-t, a bővítményeket és a sablonokat. Lásd: A WordPress wp-login.php oldalának védelme.
További olvasnivaló
- MDN: Strict-Transport-Security (angol nyelvű)
- MDN: Content-Security-Policy (angol nyelvű)
- MDN: Permissions-Policy (angol nyelvű)
- HSTS preload lista (angol nyelvű)
Szeretne többet megtudni? Végezze el ingyenes Biztonságosan online vállalkozóknak tanfolyamunkat, ezen belül a 4.2 Az Ön webhelye: https, HSTS és biztonsági fejlécek leckét, vagy ingyenes WordPress-tanfolyamunk 7.4 A webhely megerősítése: jogosultságok, fejlécek és biztonsági bővítmények leckéjét.
