HSTS paaiškinimas: Strict-Transport-Security teisingai

HTTP Strict Transport Security (HSTS) yra viena atsako antraštė, liepianti naršyklėms su jūsų svetaine bendrauti tik per HTTPS. Ji uždaro mažą, bet pavojingą langą, kur pirmasis apsilankymas gali būti pažemintas ar perimtas — tačiau įdiegta neatsargiai ji taip pat gali užrakinti lankytojus nuo jūsų svetainės.

Trumpai

Siųskite Strict-Transport-Security, kai visa jūsų svetainė veikia per HTTPS. Pradėkite nuo trumpo max-age, įsitikinkite, kad niekas nesugenda, tada padidinkite jį iki metų ir pridėkite includeSubDomains. preload pridėkite tik tada, kai esate tikri, kad kiekvienas dabartinis ir būsimas subdomenas visada bus HTTPS. Ar jūsų svetainė ją siunčia, patikrinkite mūsų antraščių patikra.

Kokią problemą HSTS sprendžia

Kai kas nors įveda example.com be schemos, naršyklė pirmiausia bando paprastą http://. Net jei tai nukreipiate į HTTPS, pati pirmoji užklausa keliauja neužšifruota. Užpuolikas tame pačiame tinkle gali ją perimti ir išlaikyti auką suklastotoje HTTP jūsų svetainės versijoje — tai technika, vadinama SSL nulupimu (SSL stripping). HSTS pašalina tą riziką: kai naršyklė pamato antraštę, ji tyliai perrašo kiekvieną būsimą užklausą į jūsų domeną į HTTPS dar prieš iš įrenginio išeinant vienam baitui.

Antraštė ir jos direktyvos

Strict-Transport-Security: max-age=31536000; includeSubDomains; preload

Visą darbą atlieka trys direktyvos:

DirektyvaReikšmė
max-ageKiek sekundžių naršyklė prisimena priverstinai naudoti HTTPS. 31536000 yra vieni metai.
includeSubDomainsTaiko taisyklę kiekvienam subdomenui, ne tik tiksliai jį atsiuntusiai priegloba.
preloadSignalizuoja, kad norite, jog domenas būtų įrašytas į naršyklių įtaisytą HSTS sąrašą, kad HTTPS būtų priverstinai naudojamas net pirmojo apsilankymo metu.

Antraštė paisoma tik tada, kai ji pateikiama per galiojantį HTTPS ryšį. Naršyklės ją ignoruoja paprastame HTTP, ir tai sąmoninga — užpuolikas neužšifruotame ryšyje neturėtų galėti jos nustatyti.

Kodėl max-age svarbus abiem kryptimis

max-age reikšmė yra pažadas, kurį naršyklė laiko, net jei persigalvojate. Nustatykite jį metams, ir kiekvienas lankytojas kiekviename įrenginyje užrakinamas prie HTTPS metams, be jokios galimybės jums nuotoliniu būdu tai atšaukti. Būtent to ir norite apsaugai — ir būtent todėl turėtumėte kilti laipsniškai, o ne iškart šokti prie didelės reikšmės.

Saugus diegimas

Traktuokite HSTS kaip laiptus, o ne jungiklį:

1 žingsnis  Strict-Transport-Security: max-age=300
2 žingsnis  Strict-Transport-Security: max-age=86400
3 žingsnis  Strict-Transport-Security: max-age=31536000; includeSubDomains
4 žingsnis  Strict-Transport-Security: max-age=31536000; includeSubDomains; preload

Pradėkite nuo penkių minučių. Įsitikinkite, kad kiekvienas puslapis, išteklius ir subdomenas švariai kraunasi per HTTPS ir kad nėra mišraus turinio įspėjimų. Tik tada pratęskite galiojimą. Prieš pridedant includeSubDomains, įsitikinkite, kad kiekvienas subdomenas — įskaitant vidinius įrankius, testavimo (staging) ir senas prieglobas — turi veikiantį sertifikatą, nes taisyklė iškart taikoma jiems visiems.

„Preload“ sąrašas ir spąstai

Įprastai naršyklė priverstinai taiko HSTS tik po to, kai bent kartą pamatė antraštę. „Preload“ sąrašas uždaro net tą pirmojo apsilankymo tarpą, į pačią naršyklę įtraukdamas įkoduotą tik-HTTPS domenų rinkinį. Kad būtų priimta, jūsų antraštė turi apimti preload, bent vienų metų max-age ir includeSubDomains, o domeną pateikiate bendram „preload“ sąrašui, iš kurio semiasi pagrindinės naršyklės.

„Preload“ sunku atšaukti. Pašalinimas iš su naršykle pateikiamo sąrašo vartotojus gali pasiekti tik po daugelio mėnesių, o per tą laiką kiekvienas subdomenas turi teikti galiojantį HTTPS, kitaip jis tampa nepasiekiamas. Neįtraukite domeno į „preload“, kol nesate tikri, kad jis — ir bet koks subdomenas, kurį kada nors galėtumėte sukurti — visam laikui bus HTTPS. Daugumai svetainių pačios antraštės apsaugai užtenka; „preload“ yra neprivalomas.

Kur ją nustatyti

Siųskite antraštę tik savo HTTPS atsakuose. Apache serveryje naudokite Header always set Strict-Transport-Security "max-age=31536000; includeSubDomains"; Nginx serveryje — add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always;. Palikite savo paprasto HTTP klausytoją nedarantį nieko, tik 301 nukreipimą į HTTPS — žiūrėkite HTTP nukreipimą į HTTPS. HSTS yra vienas punktas platesniame saugumo antraščių kontroliniame sąraše; baigę atlikite patikrą, kad įsitikintumėte, jog jis veikia.

Dažniausiai užduodami klausimai

Ar HSTS pakeičia mano HTTP į HTTPS nukreipimą?

Ne. Nukreipimo vis tiek reikia pirmajam apsilankymui ir naršyklėms, kurios niekada nematė antraštės. HSTS yra papildomas sluoksnis, pašalinantis perėmimo langą pakartotiniuose apsilankymuose.

Kas nutinka, jei mano sertifikatas pasibaigia, kol HSTS aktyvus?

Naršyklė atsisakys įkelti svetainę ir neleis vartotojams pereiti pro sertifikato įspėjimą. Tai numatyta, tad sertifikato atnaujinimą laikykite automatizuotą ir stebimą.

Ar kiekviena svetainė turėtų naudoti „preload“?

Ne. Paprasta antraštė gerai apsaugo grįžtančius lankytojus. „Preload“ padeda tik pačiam pirmajam apsilankymui ir yra sunkiai atšaukiamas, tad palikite jį svetainėms, tikrai liksiančioms tik HTTPS visuose subdomenuose.

Susiję vadovai

Patikrinkite savo svetainę pagal šį vadovą

Atlikite nemokamą ScanOpsPro patikrą ir pažiūrėkite, kaip jūsų svetainė tvarkosi su pagrindais.

Atlikti nemokamą patikrą