Ovo je stara izmjena dokumenta!
CSRF napadi vrsta su mrežnih napada u kojima napadač zloupotrebom HTTP protokola i implementacija web preglednika nastoji postići da žrtva koristeći svoj web preglednik podnese HTML formu bez vlastite privole, a često i bez znanja da je forma uopće podnesena. U ovom radu obradjeno je funkcioniranje HTTP kolačića i HTML formi, koji su preduvjeti za CSRF napade. Opisana je glavna ideja i tijek CSRF napada, kao i dvije varijante izvođenja, ovisno o vrsti HTML forme. Objašnjena je zaštita od CSRF napada, kao i dva najčešća pristupa njenoj implementaciji.
Ispunjavanje formi (formulara) cesto je korištena funkcionalnost web preglednika. Primjerice svaki puta kada se korisnik prijavljuje u web stranicu on popunjava formu. HTML forme koriste se i za ostale namjene, a neke od njih su i monetarne prirode: primjerice ispunjavanje forme na stranici banke u cilju uplate na drugi bankovni račun. CSRF (engl. Cross-Site Request Forgery) napadi koriste se kako bi žrtva bez privole/znanja ispunila i poslala HTML formu. Bitan aspekt CSRF napada su HTML forme i način na koji se one prenose sa klijenta na poslužitelj. Jednako bitan aspekt je i autentifikacija korisnika (u kontekstu napada: žrtve), koja se najčešće implementira korištenjem kolačića, čija je funkcionalnost objašnjena u idućem poglavlju.
Protokol HTTP u svojim inicijalnim verzijama nije imao nikakvu mogućnost pohrane stanja (engl. stateless), odnosno svi klijentski zahtjevi na poslužitelju su se obrađivali anonimno, pri čemu poslužitelj nije mogao odrediti identitet korisnika koji je uputio pojedini zahtjev. Vrlo brzo je razvojem weba došlo do potrebe za identifikacijom pojedinih korisnika, primarno u cilju pružanja bolje usluge korisniku (pamćenje upisanih podataka u formama, personalizirane poruke korisniku i slično).
Kolačići (engl. cookies) najkorištenija su metoda identifikacije korisnika. Razvijeni su u kompaniji Netscape, a njihovo korištenje ubrzo je standardizirano i implementirano od strane svih većih web preglednika.
Kolačići su implementirani koristeći zaglavlja, odnosno postojeću infrastukturu protokola HTTP. Nakon što poslužitelj korištenjem posebnog zaglavlja `Set-cookie` klijentu dojavi potrebu za spremanjem kolačića, klijent (najčešće web preglednik) sadržaj kolačića sprema na računalo. U svakom idućem zahtjevu koji klijent upućuje prema poslužitelju, klijent će u posebno zaglavlje `Cookie` zapisati vrijednost kolačića koju je poslužitelj postavio. Same vrijednosti kolačića su parovi ključ-vrijednost, separarani točka zarezima, primjerice: ime=“ivan”;prezime=“horvat”
. Slika 1 prikazuje postavljanje i korištenje kolačića.
Prvi zahtjev, prikazan u slučaju A, prikazuje klijenta koji šalje zahtjev na poslužitelj “www.joes-hardware.com”, pri čemu klijent nikada prije nije pristupio navedenom poslužitelju i nema lokalno pohranjene kolačiće navedenog poslužitelja.
U obradi navedenog zahtjeva poslužitelj odgovara s odgovorom prikazanom u slučaju B, pri čemu poslužitelj prepoznaje nedostajanje Cookie
zaglavlja u zahtjevu prikazanom u slučaju A, te u zaglavlju odgovora klijentu postavlja kolačić korištenjem Set-cookie
zaglavlja. Sam kolačić pohranjuje samo dva para vrijednosti ključeva, pri čemu se ključ id
postavlja na vrijednost “34294”
a ključ domain
se postavlja na vrijednost “joes-hardware.com”
. Ključ domain
posebno se interpretira od strane klijenta, o čemu će više riječi biti kasnije.
Na poslijetku, u slučaju C prikazan je idući zahtjev koji klijent upućuje prema istom poslužitelju, ali ovaj puta je prisutno zaglavlje Cookie
, te je u njega upisan sadržaj kolačića, odnosno navedeni par ključ-vrijednost.
Poslužitelj moze konfigurirati razne parametre vezane uz funkcionalnost kolačića korištenjem specijalnih ključeva u kolačiću. Nazivi tih specijalnih ključeva su: Expires, Domain, Path, i Secure.
Korištenjem ključa Domain
moguće je klijentu dojaviti da sadržaj kolačića šalje i na specifične (ili sve) poddomene poslužitelja koji je postavio kolačić.
Ključ Path
dojavljuje klijentu da sadržaj kolačića šalje samo ako putanja do resursa u URL-u započinje sa vrijednosti zapisanoj u ključu Path
.
Ključ Expires
klijentu dojavljuje kada kolačić prestaje biti validan, odnosno trenutak nakon kojeg klijent prestaje slati kolačić posluzitelju. Ukoliko je ovaj ključ izostavljen, klijent prestaje slati kolačić istekom web sjednice sa poslužiteljom.
Ključ Secure
označava da klijent šalje kolačić samo ako se za komunikaciju klijenta i poslužitelja koristi sigurna veza (SSL).