Paskelbta:2020-11-01 | Atnaujinta:2020-11-19 | Parašė:Vytenis | Užtruksite:8 min.
Kiekvieną dieną atrandama vis daugiau svetainių saugumo spragų. Todėl nuolatinė svetainių priežiūra tampa būtinybe norint, kad svetainės turinys būtų visada pasiekiamas bei saugus lankytojams. Apsisaugoti nuo įsilaužimų galima pasitelkiant įvairias metodikas. Viena efektyviausių ir paprasčiausių, tačiau naudojama retokai, tai HTTP antraštės, apie kurias ir kalbėsime šiame straipsnyje.
Svetainės lankytojas, atidarydamas atitinkamą puslapį, pateikia užklausą į naršyklę suvesdamas svetainės domeno adresą naršyklės adreso laukelyje. Tuo metu naršyklė HTTP protokolo pagalba kreipiasi į serverį, kuriame yra laikomas svetainės turinys. Serveris turinį apdoroja ir siunčia atsakymą naršyklei. Naršyklė gauna informaciją, sudarytą iš dviejų dalių: turinio, pateikiamo lankytojui, ir informacijos, reikalingos naršyklei. Pastarojoje informacijoje ir yra užkoduojamos taisyklės, kokie veiksmai galimi naudojant svetainės turinį.
Nenaudojant HTTP antraščių, svetainės lankytojas gali matyti visą svetainės kodo informaciją ir dalį jos panaudoti atliekant ataką į svetainę. Čia ir pasitelkiamos HTTP saugumo antraštės, kurios pateikia taisykles naršyklei, kokie duomenys gali būti matomi viešai, o kokie ne. Apribojant prieigą prie tam tikrų svetainės duomenų, sumažėja, o dažnai ir visiškai eliminuojama svetainės nulaužimo tikimybė.
Atakos, nukreiptos į internetines svetaines
HTTP saugumo antraščių naudojimas padeda apsisaugoti nuo dažniausiai vykdomų atakų prieš svetaines. Žemiau aptariamos įprastai prieš svetaines vykdomos atakos, jų tikslas bei kokios HTTP antraštės gali būti panaudojamos norint apsisaugoti:
Paspaudimų vagystė (angl. Clickjacking) – šio tipo ataka vykdoma įterpiant apgaulingą turinį į svetainę. Pavyzdžiui, svetainės lankytojas mato pranešimą, kad jis laimėjo žaidime ir jo prašoma paspausti ant laukelio „Atsiimti laimėjimą“. Iš tikrųjų šis mygtukas atlieka visai kitokį veiksmą, nei svetainės lankytojas įsivaizduoja, pavyzdžiui, parsiunčia žalingo kodo failą į lankytojo kompiuterį. Lankytojas pabando atsidaryti failą ir virusas įdiegiamas į kompiuterį. Nuo tokių apgaulingo turinio įterpimų apsisaugoti padeda X-Frame-Options antraštė.
Svetimo kodo įterpimas (angl. Code injection) – atakos, kurių metu aptinkama saugumo spraga ir ja pasinaudojama įterpiant programinį kodą be svetainės savininko žinios. Pavyzdžiui, svetainėje yra tam tikra forma, kurioje prašoma įvesti asmeninius duomenis. Aptikus saugumo spragą, šiame puslapyje įterpiamas kodas, kuris persiunčia visus suvestus duomenis į kitą svetainę. Nuo tokių atakų padeda apsisaugoti Content Security Policy (CSF) antraštė.
Klaidingas duomenų tipų interpretavimas (angl. MIME sniffing) – vykdant šio tipo atakas yra pasitelkiama naršyklė, kuri kai kuriais atvejais savarankiškai interpretuoja veiksmus, bandomus atlikti su svetaine. Pavyzdžiui, į svetainę bandoma įterpti žalingą kodą, kuris naudoja JavaScript duomenų tipą. Svetainė jau naudoja Content Security Policy antraštę ir bandymai įterpti kodą iš šalies yra stabdomi. Programišius pakeičia duomenų tipą į tekstinį ir pasitelkia naršyklės veikimą, kuris pagal nutylėjimą interpretuoja kodą savo nuožiūra. Tokiu būdu sudaromos sąlygos įterpti šį kodą ir vėliau naudoti kaip skriptą, o ne tiesiog tekstinį failą. Būtent tokio tipo naršyklės interpretavimai yra apribojami su X-Content-Type-Options antrašte.
Sertifikatą turinčios svetainės atidarymas naudojant nesaugų susijungimą – šios atakos esmė yra pasinaudoti nesaugiu peradresavimu, kurį vykdo naršyklė iš HTTP protokolo į HTTPS. Taip yra todėl, kad sertifikatą turinčios svetainės gali būti atidaromos ir nenaudojant sertifikato. Sertifikato naudojimui yra pasitelkiamas peradresavimas į saugaus susijungimo protokolą (HTTPS). Programišiai gali pasinaudoti šiuo peradresavimu ir įsiterpti į susijungimą dar iki atidarymo per HTTPS protokolą. Nuo tokio tipo įsilaužimų galima apsisaugoti naudojant (HSTS) antraštę, kuri nurodo naršyklei, jog svetainė gali būti atidaroma tik naudojant HTTPS protokolą.
Laikinųjų duomenų (angl. cache) vagystė – šio tipo vagystės galimos įsilaužiant ne tiesiogiai į svetainę, o į tarpinį serverį, kuriame laikomi laikinieji duomenys. Šios atakos dar kitaip vadinamos tarpininko (angl. Man-In-The-Middle) atakomis. Interneto naršyklės nuolatos vykdo laikinųjų duomenų saugojimą greitesniam svetainės užkrovimui ateityje, kai svetainė bus atidaroma pakartotinai. Dažnu atveju, svetainės naudoja įvairius tarpinius serverius (angl. Content Delivery Network) greitesniam tinklalapio užkrovimui. Šiuose serveriuose saugomi laikinieji duomenys. Tarp tokių duomenų gali būti saugomi prisijungimai prie sistemų, pašto dėžučių ir pan. Nors ir tikimybė, kad šie duomenys bus pasisavinti yra nedidelė, tačiau svetainės savininkas turi užtikrinti, kad šiais duomenimis nėra dalinamasi su kitais šaltiniais, kaip pavyzdžiui CDN. Norint išvengti tokių situacijų, reikėtų naudoti Cache-Control antraštę, kuri nurodo, kokie duomenys ir kiek laiko gali būti saugomi tarpiniuose serveriuose.
Be abejo, tai yra tik dalis galimų atakų tipų. Nauji būdai įsilaužti į svetaines atrandami kiekvieną dieną, todėl, norint to išvengti, reikia stengtis neatsilikti nuo saugumo standartų ir naudoti kaip įmanoma patikimesnes apsisaugojimo praktikas. Detalesnę informaciją apie vieną iš praktikų – HTTP saugumo antraščių tipus bei funkcijas – aptarsime toliau šiame straipsnyje.
Antraščių tipai bei suteikiamos apsaugos
HTTP saugumo antraščių tipų kiekis nuolatos auga atsižvelgiant į naujus saugumo spragų aptikimus. Kai kurios antraštės kuriamos tik konkrečioms naršyklėms arba jų versijoms, nes kas veikia vienoje naršyklėje nebūtinai veiks kitoje. Tačiau nerekomenduojama stengtis panaudoti kuo daugiau skirtingų saugumo antraščių, nes perteklinis jų naudojimas gali lemti svetainės sutrikimus. Pasitaiko atvejų, kai antraštės netgi trikdo viena kitos veikimui ar sulėtina svetainę. Todėl saugumo specialistai rekomenduoja naudoti nuo 5 iki 8 populiariausių saugumo antraščių.
Svarbu atkreipti dėmesį ir į tai, kad klaidingas antraštės naudojimas gali sugadinti svetainę ir ji gali būti išvis neatidaroma, todėl, prieš pradedant naudoti šį apsisaugojimo būdą, siūlome atlikti testavimus naudojant svetainės kopiją arba pasitelkiant kitą mažiau svarbią svetainę. Siūlome kreiptis į savo svetainės kūrėjus ar programuotojus prieš pradedant naudoti šią saugumo praktiką. Patikrinti, ar įvestos antraštės yra veikiančios, galite šioje svetainėje.
Taigi, žemiau pateikiame dažniausiai naudojamas HTTP saugumo antraštes:
Content-Security-Policy – apriboja galimybę įterpti kodą ar kitą turinį, veikiantį iš išorės. Taip galima nurodyti konkretų internetinį adresą, iš kurio turinys gali būti užkraunamas. Arba nurodyti tik tuos turinio elementus ir adresus, kurie leidžiami, apribojant visą kitą turinį iš išorės. CSF yra funkcionaliausia antraštė apsisaugant nuo clickjacking ir kodo įterpimo atakų.
HTTP Strict Transport Security – draudžia bandymus pasiekti svetainę nenaudojant SSL sertifikato, t.y. HTTP protokolo naudojimą vietoje HTTPS. Antraštėje gali būti nurodomas laikas, kiek ilgai naršyklės turės atlikti šį ribojimą.
X-Frame-Options – naudojant šią antraštę, pavyks apsisaugoti nuo clickjacking atakų, t.y., apribojamas frame elemento įterpimas. Ši antraštė atlieka dalį CSF antraštės funkcionalumo, tačiau ją naudoti taip pat naudinga, nes ji atpažįstama didesnėje dalyje naršyklių, nei CSF. Taip pat naudojama sintaksė yra paprastesnė, todėl yra mažesnė tikimybė ją nekorektiškai aprašyti.
X-Content-Type-Options – šios antraštės pagrindinis ir vienintelis tikslas yra apsisaugoti nuo MIME sniffing atakų, t.y., nuo naršyklės savarankiškų interpretavimų bandant paleisti svetainės kodą. Naudojant šią antraštę, naršyklė viešai nepateikia naudojamų turinio elementų, todėl programišiai tiksliai nežino, kokio kodavimo elementą pateikti, norint apeiti saugumo apribojimus.
Cache-Control – naršyklei pateikiama informacija, koks lankytojo turinys gali būti saugomas tarpiniuose serveriuose bei kiek laiko gali būti saugomas visas svetainės turinys. Ši antraštė yra naudinga tiek norint apsisaugoti nuo lankytojų duomenų vagystės, tiek siekiant paspartinti svetainės veikimą.
Feature-Policy – suteikiama galimybė valdyti tokias naršyklės funkcijas, kaip geografinė padėtis, viso ekrano vaizdas, garsiakalbis, USB, automatinis paleidimas, vibracija, mikrofonas, mokėjimai, VR ir kt. Naudojant šią antraštę, aukščiau nurodytos funkcijos negali būti aktyvuojamos iš išorės.
Detalesnę informaciją apie šių antraščių naudojamą sintaksę bei konkrečias galimas reikšmes rasite mūsų parengtoje pamokoje. Kai kurios turinio valdymo sistemos turi įskiepius, padedančius administruoti HTTP antraštės. Pavyzdžiui, WordPress turinio valdymo sistemoje galite įsidiegti HTTP headers įskiepį.
Apibendrinimas
Naudojant HTTP saugumo antraštes bei laikantis jų sudarymo sintaksės, Jūsų svetainė bus apsaugota nuo galimų atakų ir įsilaužimų. Bet kokiu atveju, vien šių antraščių naudojimas negali 100% apsaugoti svetainės, todėl nereikėtų pamiršti laiku atlikti programinės įrangos atnaujinimų. Svetainės saugumas yra svarbus tiek svetainės savininkui, tiek svetainės lankytojui. Todėl tik turėdami saugią svetainę galėsite būti ramūs dėl savo lankytojų saugumo, kurie galės pasitikėti jūsų svetaine ir joje lankytis vis dažniau.
Ačiū už pastebėjimą! Papildomai peržiūrėjau straipsnį ir radau vieną klaidą - ją pataisiau. Galbūt pastebite ir daugiau klaidų? Jeigu taip, būčiau dėkingas, kad pasidalintumėte :)
Išsitaisykite gramatines klaidas.
Laba diena, Donatai,
Ačiū už pastebėjimą! Papildomai peržiūrėjau straipsnį ir radau vieną klaidą - ją pataisiau. Galbūt pastebite ir daugiau klaidų? Jeigu taip, būčiau dėkingas, kad pasidalintumėte :)