HSTS ir saugumo antraštės Jūsų svetainei
Su kiekvienu puslapiu Jūsų interneto serveris siunčia antraštes (headers): trumpas eilutes su nurodymais naršyklei. Jos iš dalies lemia, kaip saugiai naršyklė elgiasi su Jūsų svetaine. Čia sužinosite, kas yra HSTS, kokios dar yra saugumo antraštės 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ą: pirmas užklausimas per http vis dar keliauja nešifruotas. Kas nors tame pačiame tinkle, pavyzdžiui, viešame „wifi“ tinkle, gali tą užklausimą perimti. HSTS (HTTP Strict Transport Security) tai išsprendžia. Jūsų svetainė per https siunčia šią antraštę:
Strict-Transport-Security: max-age=31536000
Naršyklė tuomet įsimena, kad Jūsų svetainę galima atidaryti tik per https. Jei lankytojas vėliau įveda http://, naršyklė pati pakeičia tai į https dar prieš siunčiant bet ką per tinklą. HSTS antraštę, kuri ateina 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 vienerių metų laikotarpį (31536000). |
includeSubDomains | Galioja ir visiems subdomenams, pavyzdžiui, shop.jusudomenas.lt ir mail.jusudomenas.lt. |
preload | Jūs prašote įtraukti į sąrašą, kuris yra įmontuotas naršyklėse (hstspreload.org). Tuomet apsaugotas net pats pirmasis apsilankymas. Tam reikalingi, be kita ko, vieneri metai, includeSubDomains ir https visuose subdomenuose. Išsibraukti iš sąrašo užtrunka ilgai. |
max-age=0 | Ištrina įsimintą nurodymą kito apsilankymo per https metu. |
includeSubDomains tai galioja ir kiekvienam subdomenui, pavyzdžiui, senam kameros ar spausdintuvo puslapiui be sertifikato. Todėl kurkite tai palaipsniui: pradėkite nuo trumpo max-age, pavyzdžiui, vienos dienos (86400), patikrinkite, ar viskas veikia, ir palaipsniui didinkite iki vienerių metų.HSTS WebOké sistemoje
Daugumoje mūsų serverių interneto serveris standartiškai siunčia HSTS kiekvienai svetainei, kuri atidaroma per https: Strict-Transport-Security: max-age=31536000. Tai vieneri metai, be includeSubDomains ir be preload. Tam Jums nieko daryti nereikia. Keliuose serveriuose tai nėra įjungta pagal nutylėjimą; ten tai įjungiate patys. Ar Jūsų svetainė jau siunčia HSTS ir su kokiu max-age, galite pamatyti naršyklės kūrėjo įrankiuose arba internet.nl teste (žr. toliau).
HSTS jungiklis DirectAdmin sistemoje
DirectAdmin sistemoje eikite į Domenai (Domains) ir spustelėkite savo domeno pavadinimą. Jei Apsaugotas SSL ryšys (Secure SSL) yra įjungtas, prie HSTS matysite jungiklį Įjungti HTTP Strict Transport Security (Enable HTTP Strict Transport Security). Po to spustelėkite Redaguoti (Save), kad išsaugotumėte. Kaip tai padaryti žingsnis po žingsnio, skaitykite straipsnyje Visada nukreipti lankytojus į https.
Jei Jūsų svetainė jau siunčia HSTS, šis jungiklis Jums nereikalingas. Įjunkite jį tik tuomet, jei Jūsų svetainė dar nesiunčia HSTS. Nustatykite HSTS tik vienoje vietoje: arba DirectAdmin sistemoje, arba faile .htaccess, bet ne abiejose. Jei naršyklė gauna dvi HSTS antraštes, ji naudoja tik pirmąją.
Kitos saugumo antraštės
| Antraštė | Nuo ko apsaugo | Vertė, nuo kurios pradėti |
|---|---|---|
X-Content-Type-Options | Naršyklė pati bando atspėti, koks tai failas, dėl ko į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, kad lankytojai nepastebimai spaustų 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žtesnis same-origin arba no-referrer. Internet.nl tinkamomis laiko tik griežtas reikšmes. |
Permissions-Policy | Nustato, kurias naršyklės funkcijas gali naudoti Jūsų puslapis ir įterpti rėmeliai, 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 (visa) | Apriboja, iš kur gali būti įkeliami skriptai, stiliai ir paveikslėliai. Tai žymiai apsunkina įterptus kenkėjiškus skriptus (XSS). | Individualiai pagal svetainę. Venkite unsafe-inline, unsafe-eval ir pakaitos simbolių (wildcards). |
Nustatymas faile .htaccess
Įdėkite šias eilutes failo .htaccess viršuje, aplanke public_html savo domene. 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 Jūsų svetainė dar nesiunčia HSTS (žr. aukščiau): # Header always set Strict-Transport-Security "max-age=31536000" </IfModule>
Pridėkite includeSubDomains tik tuomet, kai esate tikri, kad kiekvienas subdomenas turi https. Jei naudojate WordPress, antraštes galite nustatyti ir per papildinį (plugin). Pasirinkite žinomą papildinį, kuris vis dar atnaujinamas, ir kiekvieną antraštę nustatykite 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), eikite į skirtuką Tinklas (Network), iš naujo įkelkite puslapį ir spustelėkite pirmąją užklausą. Po antrašte Atsakymo antraštės (Response Headers) matysite viską, ką siunčia Jūsų serveris.
- Komandinė 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 skaitymui
- MDN: Strict-Transport-Security (anglų kalba)
- MDN: Content-Security-Policy (anglų kalba)
- MDN: Permissions-Policy (anglų kalba)
- HSTS iš anksto įkelto sąrašo svetainė (HSTS preload list) (anglų kalba)
