Saugumo antraštės: paskirtis ir diegimas
Autorius: Domeny.ForSale redakcija Paskelbta
Trumpai: saugumo antraštės (Security Headers) – tai HTTP atsakymo antraštės, perduodančios naršyklei saugaus svetainės apdorojimo taisykles. Jos padeda riboti nepageidaujamų scenarijų vykdymą, svetainės įterpimą į svetimų svetainių rėmelius ir informacijos atskleidimą pereinant iš vienos svetainės į kitą. Jos nepakeičia saugaus kodo ar atnaujinimų, bet suteikia papildomą apsaugos sluoksnį.
Kaip veikia saugumo antraštės
Kai naršyklė atsisiunčia puslapį, serveris siunčia jo turinį ir metaduomenis, t. y. atsakymą apibūdinančią informaciją. HTTP antraštės yra šių metaduomenų dalis. Jos nerodomos puslapio tekste, tačiau naršyklė pagal jas gali apriboti gautų išteklių naudojimą.
Saugumo antraštės gali nurodyti naudoti šifruotą ryšį, apibrėžti leidžiamus scenarijų šaltinius arba uždrausti įterpti puslapį į kitos svetainės rėmelį. Jos paprastai nustatomos serverio, programos, atvirkštinio tarpinio serverio arba CDN – turinio pristatymo tarpinės infrastruktūros – konfigūracijoje.
Šias apsaugos taisykles pirmiausia vykdo naršyklė. Jos netrukdo kitais įrankiais siųsti užklausų tiesiai programai, todėl nepakeičia prieigos teisių tikrinimo serveryje.
Svarbiausios saugumo antraštės ir jų paskirtis
Vieno visoms svetainėms tinkamo nustatymų rinkinio nėra. Toliau pateiktos antraštės skirtos skirtingoms grėsmėms valdyti, todėl jas reikia pritaikyti prie svetainės veikimo.
| Antraštė | Kam skirta | Į ką atkreipti dėmesį |
|---|---|---|
Content-Security-Policy | Nustato leidžiamus scenarijų, stilių ir kitų išteklių šaltinius. | Pernelyg griežta politika gali užblokuoti formą, mokėjimus ar analitiką. |
Strict-Transport-Security | Nurodo naršyklei nustatytą laiką naudoti HTTPS. | Ilgam galiojimo laikotarpiui ir subdomenų įtraukimui reikia paruošti visą infrastruktūrą. |
X-Content-Type-Options | Kai reikšmė yra nosniff, riboja ištekliaus tipo spėjimą, neatitinkantį serverio deklaruoto tipo. | Serveris turi siųsti teisingą Content-Type, pavyzdžiui, scenarijų ir stilių failams. |
Referrer-Policy | Valdo, kokia informacija apie puslapio adresą perduodama antraštėje Referer. | Nustatant reikia atsižvelgti į privatumą ir integracijų poreikius. |
Permissions-Policy | Riboja prieigą prie pasirinktų naršyklės funkcijų, pavyzdžiui, kameros ar geografinės vietos nustatymo. | Atskirų direktyvų palaikymas priklauso nuo naršyklės. |
X-Frame-Options | Riboja puslapio įterpimą į rėmelius. | Suteikia mažiau lankstumo nei CSP direktyva frame-ancestors. |
CSP, arba Content Security Policy, padeda sumažinti XSS atakų, kai nepageidaujamas kodas vykdomas svetainės kontekste, padarinius. Vien patikimų domenų sąrašas visapusiškos apsaugos nesuteikia: svarbios konkrečios direktyvos, scenarijų įkėlimo būdas ir tai, kad nebūtų pernelyg plačių išimčių.
Nuo paspaudimų užgrobimo (clickjacking), kai naudotojas apgaulės būdu paskatinamas spustelėti svetimoje svetainėje paslėpto puslapio elementą, padeda apsisaugoti CSP direktyva frame-ancestors. Ji gali visiškai uždrausti įterpti puslapį arba leisti tai daryti tik nurodytose svetainėse.
Pavyzdys: svetainė su forma ir išorinėmis paslaugomis
Tarkime, įmonės svetainėje naudojama kontaktinė forma, žemėlapis ir išorinis analitikos įrankis. Įdiegus CSP, leidžiančią naudoti tik savo domeno išteklius, žemėlapis ir analitika gali nustoti veikti. Todėl prieš diegiant reikia išsiaiškinti, iš kur svetainė gauna scenarijus, stilius, vaizdus ir rėmelių turinį bei kur siunčia užklausas.
Jei svetainės neturi būti galima įterpti į jokį rėmelį, politikos fragmentas galėtų atrodyti taip:
Content-Security-Policy: frame-ancestors 'none'
Tai tik įterpimo taisyklė, o ne visa CSP politika. Ji neriboja scenarijų šaltinių ar tinklo ryšių. Jei svetainėje CSP jau naudojama, taisyklę reikia apgalvotai suderinti su esama konfigūracija, o ne nepatikrinus pridėti dar vieną politiką.
Svetainei, kuriai nereikia kameros ar mikrofono, galima apsvarstyti tokį nustatymą:
Permissions-Policy: camera=(), microphone=()
Šio nustatymo nereikėtų kopijuoti į vaizdo pokalbių programą. Tinkama antraštė riboja nereikalingas galimybes, o ne naudotojui būtinas funkcijas.
Kaip patikrinti ir saugiai įdiegti antraštes
Paprasčiausia atidaryti naršyklės kūrėjo įrankius, pereiti į tinklo skirtuką, atnaujinti puslapį ir pasirinkti pagrindinio dokumento užklausą. Atsakymo antraščių skiltyje galima patikrinti, ką iš tikrųjų gavo naršyklė. Vien įrašas serverio konfigūracijoje dar nereiškia, kad antraštė pasiekia naudotoją.
Praktinė diegimo eiga:
- Patikrinkite skirtingų tipų adresus: pagrindinį puslapį, prisijungimo puslapį, formas ir klaidų puslapius. Atsakymai gali pereiti per skirtingus infrastruktūros sluoksnius.
- Nustatykite, kur valdote antraštes. Programa, serveris ir CDN neturėtų netyčia perrašyti nustatymų ar pridėti prieštaringų taisyklių.
- Paruoškite CSP naudodami
Content-Security-Policy-Report-Onlyrežimą. Jis leidžia stebėti pažeidimus neblokuojant išteklių; ataskaitoms rinkti reikia papildomos konfigūracijos. - Išbandykite pagrindinius naudotojo veiksmus, įskaitant prisijungimą, formos pateikimą ir mokėjimą, jei tokia funkcija yra.
- Įjunkite politikos taisyklių vykdymą ir po diegimo stebėkite klaidas.
HSTS – mechanizmą, įjungiamą antrašte Strict-Transport-Security, – diekite tik tada, kai HTTPS veikia tinkamai. Parametras includeSubDomains apima ir subdomenus, todėl prieš jį naudodami patikrinkite ir ne tokias akivaizdžias paslaugas. Naujausią direktyvų sintaksę ir jų palaikymą pasitikrinkite oficialioje naudojamos platformos ir naršyklių dokumentacijoje.
Ko neparodo saugumo skenerio rezultatas
Skeneris gali aptikti trūkstamą antraštę ar rizikingą reikšmę, tačiau jo įvertinimas neįrodo, kad programa saugi. Kai kurios politikos reikalingos tik konkrečiais naudojimo atvejais, o pridėjus jas vien dėl geresnio įvertinimo gali sutrikti integracijos.
Antraštės neištaisys netinkamai nustatytų prieigos teisių, duomenų bazės pažeidžiamumų ar kode atskleistų slaptų duomenų. Pradėkite nuo tikrųjų savo svetainės atsakymų patikros ir pasirinkite vieną pakeitimą, kurio veikimą galite patikrinti prieš jį paskelbdami.
Taip pat skaitykite: Kas yra CSP?
