User Tools

Site Tools


http

This is an old revision of the document!


HTTP

HTTP (Hypertext transfer protocol) je protokol kojeg web preglednici (engl. browsers) koriste za komunikaciju sa web sjedištima (engl. websites).

HTTP zahtjev

HTTP zahtjev je poruka koju web preglednik šalje nekom poslužitelju kako bi dohvatio sadržaj potreban za učitavanje i prikaz određene stranice. Poruke HTTP protokola imaju dobro definiranu i standariziranu formu, informacije i podatke koje sadrže i oblik poruke.

Među najvažnijim informacijama i djelovima HTTP zahtjeva, koji svaki HTTP zahtjev sadrži su: HTTP verzija, HTTP metoda, HTTP zaglavlja (eng. headers), tijelo zahtjeva i URL resursa (npr. slike, teksta, web forme i slično) kojem se želi pristupiti.

HTTP metode

Unutar svakog HTTP zahtjeva koristi se neka HTTP metoda kojom je definirano koju akciju treba izvesti nad određenim resursom. Najvažnije i najčešće korištene metode su GET, POST, PUT, DELETE i HEAD.

HEAD metoda dohvaća samo zaglavlja (eng. headers) odgovora u kojima su sadržani metapodatci o resursu, npr. veličina resursa i dostupnost resursa na poslužitelju. Ova metoda se koristi kada želimo dohvatiti i provjeriti određene podatke, bez da dohvaćamo cijeli resurs koji ponekad može biti zahtjevan za preuzimanje. Zaglavlja odgovora su ista kao što bi bila u slučaju da se koristi GET metoda, ali HTTP odgovor ne sadrži tijelo.

GET metodom se dohvaća uzorak željenog resursa (npr. GET /index.html). U pravilu GET metodom se isključivo dohvaćaju traženi podatci te se ne vrše nikakve izmjene u aplikaciji. Odgovor se sastoji od zaglavlja i od tijela odgovora u kojem su sadržani traženi podatci. POST metoda služi za izmjenu ili stvaranje podataka na poslužitelju. Unutar tijela zahtjeva, sadržane su informacije pomoću kojih se stvaraju ili mijenjaju traženi resursi. Važno je da informacije u tijelu semantički odgovaraju resursu kojeg treba stvoriti ili promijeniti (npr. tijelo zahtjeva: ime=ivica&prezime=ivić&ID=27). U svakodnevnom korištenju, to nije problem za korisnika, s obzirom na to da se unutar uzorka podataka koji se dohvaćaju GET metodom uobičajeno već nalaze forme koje ispunjavanjem i podnošenjem automatski generiraju POST zahtjev i šalju ga na poslužitelj.

DELETE metodom se zahtjeva brisanje određenog resursa na poslužitelju.

PUT metodom se zahtjeva izmjena ili stvaranje određenog resursa. Za razliku od POST metode,PUT metoda je idempotentna. Zvanjem iste PUT metode više puta za redom nakon prve promjene, naknadni zahtjevi PUT metode neće vršiti izmjene, dok slanjem više POST zahtjeva za redom, izmjene mogu biti izvršene svaki puta, npr. dodavanje istog komenara više puta.

PRIMJER Demonstracija HTTP metoda alatom curl
Na terminalu na Linuxu ili iz cmd-a na Windowsu pokrećemo curl naredbe redom.

--head https://platforma.hacknite.hr/

Ova naredba dohvaća samo zaglavlja HTTP odgovora s navedene stranice.  Rezultat izvršavanja metode HEAD pomoću curla

https://platforma.hacknite.hr/. 

Za izvršavanje GET metode nisu potrebne nikakve opcije jer curl standardno koristi HTTP GET metodu kada se ne navedu druge opcije. U rezultatu ispod primjećujemo da se izvršenjem GET metode dohvaća HTML web stranice. U terminalu/cmd-u je stoga prikazan isti onaj HTML kojeg bi web preglednik prikazao. Rezultat izvršavanja metode GET pomoću curla

PRIMJER Hacknite zadatak - e-trgovina “Union”
Na linku http://chal.platforma.hacknite.hr:10010/registration.php nalazi se forma za registraciju. Pri unosu nekog korisničnkog imena i lozinke i pritiska na gumb „Registriraj se“, web browser šalje POST zahtjev na server s upisanim korisničkom imenom i lozinkom.

Ova akcija može se izvršiti i pomoću curla. Potrebno je koristi -X opciju uz vrijednost POST, kojom se default metoda GET mijenja u POST metodu. Zastavicom -d se unose vrijednosti koje se šalju na server u POST zahtjevu. Forma na web stranici http://chal.platforma.hacknite.hr:10010/registration.php na kojoj ćemo registraciju izvršiti pomoću curla

Pregledom HTML sadržaja stranice, vidimo da su imena HTML elemenata polja za unos „username“ i „password“. Sada se pomoću te informacije može sastaviti curl naredba:

curl -X POST -d "username=MarkoMarkic&password=JakaLozinka123!!" 
http://chal.platforma.hacknite.hr:10010/registration.php

Izvršavanjem naredbe, od stranice se dobiva HTML odgovor na kojem se vidi potvrda da je registracija uspješno obavljena. Uspijeh! Sada se podatci korišteni u curl naredbi mogu iskoristiti za prijavu na stranici.

HTTP zaglavlja

HTTP zaglavlja (eng. headers) sadržavaju dodatne informacije i metapodatke HTTP zahtjeva i odgovora. Jedno HTTP zaglavlje se sastoji od imena zaglavlja, dvotočke i vrijednosti zaglavlja, npr. Connection: keep-alive. Postoje standardizirana zaglavlja,koja su prisutna u skoro svim HTTP zahtjevima i odgovorima. Mogu se koristiti i proizvoljna zaglavlja specifična za neku web aplikaciju.

Zaglavljima zahtjeva se mogu poslati dodatne informacije uz zahtjev kako bi server prikladno odgovorio, recimo željeni format odgovora (npr. JSON) ili dodatne informacije o klijentu koji stvara zahtjev (User-agent zaglavlje). U zaglavljima zahtjeva mogu se nalaziti i autentifikacijski kolačići ili tokeni, pomoću kojih poslužitelj provjerava ima li klijent pravo pristupa resursu..

Zaglavlja odgovora sadržavaju dodatne informacije o odgovoru, kao je li odgovor dohvaćen iz predmemorije (engl. cache) ili koji software koristi poslužitelj s kojeg je poslan odgovor.

Neki tipovi zaglavlja:

  • Cookie - zaglavlje korišteno uglavnom u zahtjevima, a ne toliko u odgovorima. U njemu se nalaze parovi vrijednosti <ime kolacica> = <vrijednost kolacica>. Kolačiće generiraju web serveri, te ih predaju korisnicima u odgovoru unutar „Set-Cookie“ zaglavlja. Zatim ih korisnički preglednik pohranjuje u trajnoj memoriji i uključuje u naknadne zahtjeve prema tom poslužitelju. Većinu kolačića poslužitelj generira zasebno za svakog korisnika te ih koristi kako bi očuvao korisničku sjednicu. Radi toga, napadač može krađom kolačića nekog korisnika oponašati njegov identitet i time izvršavati akcije za koje je samo korisnik-žrtva ovlašten.
  • Content-Type - zaglavlje koje se koristi za definiranje tipa resursa koji se šalje u odgovoru ili zahtjevu kako bi browser znao što je i u kojem je formatu resurs. Primjeri mogućih vrijednosti su „image/png“ za slike u .png formatu, „application/json“ za podatke poslane u JSON formatu, „application/zip“ za kompresirane arhive…
  • CSRF (Cross Site Request Forgery) - tajna, jedinstvena i nepredvidivo generirana vrijednost koja se koristi za sprječavanje CSRF napada. Web serveri generiraju jedinstven CSRF token za svakog korisnika koji se potom naknadno koristi u komunikaciji između korisnika i poslužitelja da se potvrdi da korisnički zahtjevi nisu zlonamjerni zahtjevi koji zloupotrebljavaju funkcionalnost koričkog tokena sjednice da izvrše neželjene akcije na web stranici.
  • User-Agent - zaglavlje koje se koristi samo pri zahtjevima, ali ne i pri odgovorima poslužitelja, a u kojem su definirani operacijski sustav i preglednik koji se koriste za podnošenje zahtjeva. Na temelju ovog zaglavlja, poslužitelj može odlučiti poslati drugačiji sadržaj odgovora ovisno o korisnikovom pregledniku i operacijskom sustavu (na primjer poznato je da je neka funkcionalnost problematična u određenom pregledniku, pa će se izostaviti u slučaju da korisnik koristi taj preglednik). Primjer jedne vrijednost zaglavlja User-Agent : Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.90 Safari/537.36.

HTTP kolačići

HTTP kolačići su uglavnom mali zapisi informacija koje web poslužitelj šalje klijentu koji posjećuje web stranice tog poslužitelja. Kolačić se stvara na web poslužitelju, interakcija slanja i prihvaćanja kolačića se odvija pomoću web preglednika, a kolačići se pohranjuju na klijentskom računalu.

Jedna od glavnih primjena HTTP kolačića je autentifikacija. Nakon što se korisnik autentificira na web sjedište, poslužitelj pošalje autentifikacijski kolačić pregledniku. Taj autentifikacijski kolačić se u pravilu šalje u svakom narednom HTTP zahtjevu, dok se korisnik ne odjavi, što omogućava poslužitelju da provjeri koji korisnik je napravio zahtjev bez da korisnik mora uvijek iznova napraviti zahtjev.

PRIMJER Zadatak s Hacknite platforme - Admin naručivanje
Odlaskom na stranicu zadatka i odabirom stranice za naručivanje u izborniku, vidi se sljedeća poruka:

Otvaranjem zadatka u Firefox browseru koji koristi Burp suiteov proxy i paljenjem presretanja zahtjeva, možemo presresti HTTPS komunikaciju sa stranice zadatka. Odlaskom na stranicu označenom „Naručivanje” u izborniku, u Burp suiteu se vidi presretnuti zahtjev: Može se vidjeti kolačić s nazivom „napredno” i vrijednošću „0”. Promjenom vrijednosti tog kolačića na 1 i prosljeđivanjem zahtjeva dobiva se rješenje zadatka.

Izvori

http.1695901990.txt.gz · Last modified: 2025/06/03 10:22 (external edit)

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki