HSTS ir saugumo antraštės Jūsų svetainei
Su kiekvienu puslapiu Jūsų žiniatinklio serveris siunčia antraštes (headers): trumpas eilutes su instrukcijomis naršyklei. Jos iš dalies nulemia, kaip saugiai naršyklė elgiasi su Jūsų svetaine. Čia sužinosite, kas yra HSTS, kokios kitos saugumo antraštės egzistuoja ir kaip jas nustatyti bei išbandyti.
Pirmiausia Jūsų svetainė turi turėti veikiantį sertifikatą ir nukreipti lankytojus į https. Apie tai skaitykite straipsniuose SSL sertifikato aktyvavimas, atnaujinimas ir problemų sprendimas ir Privalomas lankytojų nukreipimas į https.
Ką daro HSTS?
Nukreipimas į https turi vieną silpną vietą: pirmasis užklausimas per http vis dar vyksta nešifruotas. Kažkas tame pačiame tinkle, pavyzdžiui, viešame „Wi-Fi“ tinkle, gali tą užklausimą perimti. HSTS (HTTP Strict Transport Security) šią problemą išsprendžia. Jūsų svetainė per https siunčia šią antraštę:
Strict-Transport-Security: max-age=31536000
Tuomet naršyklė įsimena, kad Jūsų svetainę galima atidaryti tik per https. Jei lankytojas vėliau įveda http://, naršyklė pati pakeičia jį į https dar prieš tai, kai kas nors keliauja per tinklą. HSTS antraštę, gautą per paprastą http, naršyklė ignoruoja.
| Dalis | Reikšmė |
|---|---|
max-age | Kiek laiko naršyklė tai įsimena, sekundėmis. Internet.nl testas laiko pakankamu bent vienerius metus (31536000). |
includeSubDomains | Galioja taip pat visiems subdomenams, pavyzdžiui, shop.jusudomenas.lt ir mail.jusudomenas.lt. |
preload | Prašote įtraukti į sąrašą, kuris yra integruotas naršyklėse (hstspreload.org). Tuomet apsaugotas net pats pirmasis apsilankymas. Tam reikalingi, be kita ko, vieneri metai, includeSubDomains ir https visuose subdomenuose. Išbraukimas iš sąrašo užtrunka ilgai. |
max-age=0 | Ištrina įsimintą instrukciją kito apsilankymo per https metu. |
includeSubDomains tai galioja ir kiekvienam subdomenui, pavyzdžiui, senam kameros ar spausdintuvo puslapiui be sertifikato. Todėl diekite palaipsniui: pradėkite nuo trumpo max-age, pavyzdžiui, vienos dienos (86400), patikrinkite, ar viskas veikia, ir palaipsniui didinkite iki vienerių metų.HSTS jungiklis DirectAdmin
DirectAdmin eikite į Domeinai (Domains) ir spustelėkite savo domeno vardą. Jei Saugus SSL ryšys (Secure SSL) yra įjungtas, prie HSTS matysite jungiklį Įjungti HTTP Strict Transport Security. Tuomet spustelėkite Redaguoti (Save), kad išsaugotumėte. Kaip tai padaryti žingsnis po žingsnio, skaitykite straipsnyje Lankytojų nukreipimas į https visada.
Jei norite sužinoti, kokį max-age siunčia Jūsų svetainė, pažiūrėkite naršyklės kūrėjo įrankiuose arba internet.nl teste (žr. toliau). Nustatykite HSTS tik vienoje vietoje: DirectAdmin arba faile .htaccess, ne abiejuose. Jei naršyklė gauna dvi HSTS antraštes, ji naudoja tik pirmąją.
Kitos saugumo antraštės
| Antraštė | Nuo ko saugo | Pradinė reikšmė |
|---|---|---|
X-Content-Type-Options | Naršyklė pati bando atspėti, koks tai failas, todėl įkeltas „paveikslėlis“ gali būti vykdomas kaip skriptas. | nosniff (vienintelė galiojanti reikšmė) |
Content-Security-Policy: frame-ancestors arba X-Frame-Options | Clickjacking: kita svetainė nematomai įkelia Jūsų puslapį rėmelyje (frame), kad lankytojai nepastebėdami spustelėtų Jūsų mygtukus. | frame-ancestors 'self' arba senesnė antraštė X-Frame-Options: SAMEORIGIN |
Referrer-Policy | Spustelėjus nuorodą į kitą svetainę, naršyklė perduoda ankstesnio puslapio adresą, kartais su paieškos žodžiu ar užsakymo numeriu. | strict-origin-when-cross-origin arba griežčiau same-origin arba no-referrer. Internet.nl laiko geromis tik griežtas reikšmes. |
Permissions-Policy | Nustato, kurias naršyklės funkcijas Jūsų puslapis ir įterpti rėmeliai gali naudoti, pavyzdžiui, kamerą, mikrofoną ir vietos nustatymą. | camera=(), microphone=(), geolocation=() išjungia šias tris. Jei Jūsų svetainė naudoja vieną iš šių funkcijų, praleiskite ją. |
Content-Security-Policy (pilna) | Apriboja, iš kur gali būti įkeliami skriptai, stiliai ir vaizdai. Tai daug apsunkina įterptų kenkėjiškų skriptų (XSS) veikimą. | Individualiai pritaikoma kiekvienai svetainei. Venkite unsafe-inline, unsafe-eval ir pakaitos simbolių (wildcard). |
Nustatymas faile .htaccess
Įdėkite šias eilutes failo .htaccess pradžioje, esančio Jūsų domeno aplanke public_html. Prieš tai pasidarykite failo kopiją.
<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=()" # Tik jei HSTS jungiklis DirectAdmin yra išjungtas: # Header always set Strict-Transport-Security "max-age=31536000" </IfModule>
Pridėkite includeSubDomains tik tada, kai esate tikri, kad kiekvienas subdomenas turi https. Jei naudojate WordPress, antraštes galite nustatyti ir per papildinį (plugin). Rinkitės žinomą ir vis dar atnaujinamą papildinį ir nustatykite kiekvieną antraštę tik vienoje vietoje: papildinyje arba faile .htaccess.
Content-Security-Policy-Report-Only. Ji nieko neblokuoja, bet naršyklės konsolėje parodo, kas būtų užblokuota. Jei abejojate, palikite tai savo svetainės kūrėjui arba pradėkite tik nuo frame-ancestors.Testavimas
- Internet.nl: įveskite savo domeną svetainės teste adresu internet.nl.
- Jūsų naršyklė: atidarykite savo svetainę, paspauskite F12 (arba pasirinkite Tikrinti elementą), eikite į skirtuką Tinklas (Network), iš naujo įkelkite puslapį ir spustelėkite pirmąją užklausą. Skiltyje Atsako antraštės (Response Headers) matysite viską, ką siunčia Jūsų serveris.
- Komandų eilutė:
curl -sI https://jusudomenas.lt/parodo antraštes.
Po kiekvieno pakeitimo patikrinkite, ar Jūsų svetainė, formos ir mokėjimo puslapis vis dar veikia. Be to, nuolat atnaujinkite savo TVS (CMS), papildinius ir šablonus. Žr. WordPress wp-login.php apsauga.
Daugiau informacijos
- MDN: Strict-Transport-Security (anglų kalba)
- MDN: Content-Security-Policy (anglų kalba)
- MDN: Permissions-Policy (anglų kalba)
- HSTS iš anksto įkeliamų svetainių sąrašas (anglų kalba)
