====== 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 [[https://en.wikipedia.org/wiki/Hypertext_Transfer_Protocol|HTTP protokola]] koji inače sam ne pamti nikakve podatke o stanju. Kolačići se uglavnom koriste u tri svrhe: - Upravljanje sesijama - Prijave, kolica za kupovinu, rezultate igre ili bilo što drugo što se server treba sjetiti - Personalizacija - Korisničke preferencije, teme i druge postavke - 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 [[https://en.wikipedia.org/wiki/Netscape|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 [[https://worldwide.espacenet.com/patent/search/family/024155035/publication/US5774670A?q=pn%3DUS5774670|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 [[https://en.wikipedia.org/wiki/Financial_Times|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 [[https://en.wikipedia.org/wiki/Internet_Engineering_Task_Force|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 [[https://tools.ietf.org/html/rfc2109|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. [[https://tools.ietf.org/html/rfc2965|RFC 2965]] je zamijenio RFC 2109 u listopadu 2000. U travnju 2011. godine je objavljena je [[https://tools.ietf.org/html/rfc6265|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 [[https://en.wikipedia.org/wiki/Unix|Unix]] programeri, a predstavlja paket podataka koji program prima i šalje natrag nepromijenjen. ===== Struktura ===== Kolačić se sastoji od sljedećih komponenti: - Name: Određuje naziv kolačića - Value: Određuje vrijednost kolačića - 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 - 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 - 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 - 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 - 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 - 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: * Najmanje 4096 bajta po kolačiću (gledano kao zbroj duljina imena, vrijednosti i ostalih atributa kolačića). * Najmanje 50 kolačića po domeni. * Najmanje 3000 kolačića ukupno. 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. {{ :racfor_wiki:mrezna_forenzika:http-cookies.png?nolink&400 |}} == 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: = == 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 [[https://en.wikipedia.org/wiki/HTTP_referer|referer]] polja zaglavlja HTTP zahtjeva, ali kolačići omogućuju veću preciznost. To se može pokazati na sljedeći način: - 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. - 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. - 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 [[https://en.wikipedia.org/wiki/Representational_state_transfer|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. [[https://en.wikipedia.org/wiki/Man-in-the-middle_attack|"č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 [[https://en.wikipedia.org/wiki/Cross-site_scripting|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: Click here! 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 ([[https://en.wikipedia.org/wiki/Same-origin_policy|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 [[https://en.wikipedia.org/wiki/End-to-end_encryption|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 ([[https://en.wikipedia.org/wiki/DNS_spoofing|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) == [[https://en.wikipedia.org/wiki/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: 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, [[https://tools.ietf.org/html/rfc2109|RFC 2109]] i [[https://tools.ietf.org/html/rfc2965|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, [[https://tools.ietf.org/html/rfc6265|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 [[https://en.wikipedia.org/wiki/Web_beacon|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 [[https://en.wikipedia.org/wiki/Privacy_policy|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 [[https://eur-lex.europa.eu/legal-content/EN/TXT/?uri=CELEX:32009L0136|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: * Primiti suglasnost korisnika prije upotrebe bilo kakvih kolačića, osim strogo potrebnih kolačića * Navesti točne i konkretne informacije o podacima koje svaki kolačić prati i njegovoj svrsi na običnom jeziku prije nego što se dobije suglasnost * Dokumentirati i spremiti pristanak primljen od korisnika * Dopustiti korisnicima pristup vašoj usluzi čak i ako oni odbiju dopustiti upotrebu određenih kolačića * Napraviti da korisnicima bude jednako lako povlačenje svog pristanka, kao što je i prije bilo davanje pristanka ===== 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] [[https://arxiv.org/abs/cs/0105018|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.