html-css-js
Differences
This shows you the differences between two versions of the page.
| Both sides previous revisionPrevious revisionNext revision | Previous revision | ||
| html-css-js [2024/03/04 16:21] – mbunic | html-css-js [2025/12/01 11:40] (current) – external edit 127.0.0.1 | ||
|---|---|---|---|
| Line 42: | Line 42: | ||
| Vidimo da nam još jedan dio flaga fali i da se ne nalazi unutar ovih triju datoteka, ali u tekstu zadatka piše „kako zabraniti google - u da indeksira moju stranicu? | Vidimo da nam još jedan dio flaga fali i da se ne nalazi unutar ovih triju datoteka, ali u tekstu zadatka piše „kako zabraniti google - u da indeksira moju stranicu? | ||
| Kako bi web tražilica znala koji se sadržaj i informacije nalaze na kojim web stranicama, da ih potom može adekvatno spremiti u svoju veliku bazu web stranica, tražilice koriste programe (tzv. web crawlere), koji sistemski pretražuje sve stranice weba na koje može naići i pregledava sadržaj tih web stranica kako bi zabilježio u svoju bazu podataka pronađenu web stranicu i ključan sadržaj koji se nalazi na toj stranici. | Kako bi web tražilica znala koji se sadržaj i informacije nalaze na kojim web stranicama, da ih potom može adekvatno spremiti u svoju veliku bazu web stranica, tražilice koriste programe (tzv. web crawlere), koji sistemski pretražuje sve stranice weba na koje može naići i pregledava sadržaj tih web stranica kako bi zabilježio u svoju bazu podataka pronađenu web stranicu i ključan sadržaj koji se nalazi na toj stranici. | ||
| - | Kako bi se reguliralo koje web stranice tražilice smiju indeksirati, | + | Kako bi se reguliralo koje web stranice tražilice smiju indeksirati, |
| - | U zadatku „Raspršeni podatci“, gdje je hint prikazan na slici 3, „kako zabraniti google – u da indeksira moju stranicu? | + | U zadatku „Raspršeni podatci“, gdje je hint prikazan na slici 3, „kako zabraniti google – u da indeksira moju stranicu? |
| - | < | + | |
| Na link web zadatka: | Na link web zadatka: | ||
| Line 51: | Line 50: | ||
| </ | </ | ||
| < | < | ||
| - | te je puni URL, zajedno | + | te je puni URL, zajedno |
| < | < | ||
| Line 65: | Line 64: | ||
| </ | </ | ||
| - | Kojima se svim web crawlerima zabranjuje indeksiranje | + | Kojima se svim web crawlerima zabranjuje indeksiranje |
| + | === Client side i Server side poslovna logika === | ||
| + | |||
| + | Kada se kreira web stranica, važno je obratiti puno pažnje na to kako će biti implementirana poslovna logika, kao na primjer provjera lozinke ili registracija korisnika. Naime, različite funkcionalnosti naše stranice mogu biti implementirane ili s pomoću JavaScripta, | ||
| + | |||
| + | Važne funkcionalnosti poslovne logike, koje moraju biti „zaštićene“ i koje korisnik ne smije mijenjati, moraju biti implementirane na **poslužiteljskoj strani**, te se unutar same web stranice, koja se poslužuje korisnicima i prikazuje na **klijentskoj strani** samo stvori sučelje s pomoću kojega korisnici pozivaju željene funkcionalnosti sa serverske strane. | ||
| + | |||
| + | __PRIMJER__ - **Zadatak s Hacknite platforme - Najsigurnija provjera lozinke**\\ | ||
| + | |||
| + | < | ||
| + | Ivan je oduvijek htio znati kako najbolje provjeriti je li upisana lozinka točna ili ne. Nakon dugo istraživanja, | ||
| + | |||
| + | Flag je u formatu CTF2021[brojevi] | ||
| + | |||
| + | http:// | ||
| + | |||
| + | |||
| + | </ | ||
| + | |||
| + | Ovaj zadatak ima sličan princip rješavanja | ||
| + | < | ||
| + | element, unutar kojeg je JavaScript kod, s pomoću kojega je implementirana sama funkcionalnost provjere točnosti lozinke. Spomenuti dio koda je prikazan na slici ispod. | ||
| + | |||
| + | {{ : | ||
| + | |||
| + | Na slici se vidi | ||
| + | < | ||
| + | element, unutar kojeg je definirana JavaScript funkcija „checkPassword“, | ||
| + | |||
| + | Pokušajem ručnog unosa lokacije, na koju bi se stranica preusmjerila prilikom unosa točne lozinke, dobivamo rješenje zadatka. | ||
| + | |||
| + | Na URL stranice: | ||
| + | < | ||
| + | dodajemo lokaciju iz koda funkcije | ||
| + | < | ||
| + | te je puni URL koji unosimo u preglednik: | ||
| + | < | ||
| + | |||
| + | {{ : | ||
| + | |||
| + | //(komentar za čitatelje) | ||
| + | |||
| + | HINT: ovaj put kritična funkcionalnost nije implementirana s pomoću JavaScripta, | ||
| + | |||
| + | === Nezaštićeni API === | ||
| + | |||
| + | Kada je određen dio poslovne logike implementiran na poslužiteljskoj strani, jedan način korištenja tih funkcionalnosti je onda preko njihovog **aplikacijskog programskog sučelja (eng. API, Application Programming Interface)**. | ||
| + | |||
| + | Korisničko sučelje se nalazi na samoj web stranici koja je poslužena korisniku, čija je namjena pojednostaviti i olakšati korištenje sustava običnim korisnicima. | ||
| + | |||
| + | Te informacije se moraju poslati na točno određenu lokaciju na serveru, u unaprijed definiranom formatu. Možemo zamisliti da na serverskoj strani postoji skup „otvorenih vrata“ koje stoje i čekaju zahtjeve, pri prihvatu ispravnog zahtjeva ga obrađuju na serverskoj strani i šalju nazad odgovor korisniku koji je poslao zahtjev. Slikovito opisano, taj skup „otvorenih vrata“ na serverskoj strani koji čeka zahtjeve jest aplikacijsko programsko sučelje, odnosno API. | ||
| + | |||
| + | Ono uglavnom nije zamišljeno za direktnu „ljudsku“ upotrebu, jer su često zahtjevi i formati u kojima se šalju zahtjevi kompleksni i teški za upotrebu, nego bi se trebao nalaziti dio koda koji bi informacije i zahtjeve korisnika, iz korisničkog sučelja, transformirao i formatirao u ispravne zahtjeve koji se onda dalje prosljeđuju na programsko sučelje serverske strane. | ||
| + | |||
| + | No to što su zahtjevi koji se šalju na API servera često složeni i slabo čitljivi i na prvi pogled nejasni, ne znači da nisu podložni manipulacijama zlonamjernih korisnika i da ne moraju biti dodatno zaštićeni. | ||
| + | |||
| + | __PRIMJER__ - **Zadatak s Hacknite platforme - Kemijske reakcije**\\ | ||
| + | |||
| + | < | ||
| + | Maja je profesorica kemije, nedavno je naučila Javascript pa je odlučila napraviti web aplikaciju na koju će stavljati nastavne materijale. Ipak, još nije skroz zadovoljna izgledom stranice pa je odlučila sakriti neke funkcionalnosti. | ||
| + | |||
| + | http:// | ||
| + | |||
| + | Flag je u formatu CTF2023[brojevi]. | ||
| + | </ | ||
| + | |||
| + | Analizom zadatka, na prvi pogled nije nam dostupno skoro ništa, samo je prikazana rečenica „Dobro došli na moj forum. Registracija će uskoro biti otvorena.“ Otvaranjem razvojnih alata (F12), unutar tijela HTML dokumenta ( unutar < | ||
| + | |||
| + | |||
| + | {{ : | ||
| + | |||
| + | Prvu skriptu možemo analizirati direktno unutar HTML dokumenta, dok za dohvat drugih dviju skripti moramo unijeti lokaciju skripte u browser, kao URL, odnosno za dohvat skripte koje se nalazi na putanji: | ||
| + | < | ||
| + | moramo nadodati tu putanju na putanju početnu putanju stranice: < | ||
| + | čime dobivamo potpunu putanju: < | ||
| + | |||
| + | Analizom ovih skripti, možemo zaključiti da je JavaScript kod koji se nalazi unutar njih „minificiran“. Minifikacija je postupak u kojemu se ulazni JavaScript kod modificira tako da se maksimalno odstranjuju svi dijelovi koda i znakovi uz održavanje iste funkcionalnosti samog koda. Time dobivamo kod koji više nije čitljiv i jednostavan za pregled ljudima, ali jest kao dokument manji, te troši manje resursa/ | ||
| + | |||
| + | Iako postoje načini za „deminifikaciju“ minificiranog koda, koji bi trebali u nekoj mjeri povratiti originalnu čitljivost, | ||
| + | |||
| + | Ovom logikom, možemo probati pretražiti par ključnih pojmova u minificiranim skriptama, kao na primjer „admin“, | ||
| + | |||
| + | Pretraživanjem riječi „flag“ u zadnjoj skripti, dobijemo zanimljiv isječak koda prikazan na slici ispod. | ||
| + | |||
| + | {{ : | ||
| + | |||
| + | Izvučena linija koda u kojoj je pronađena riječ flag: | ||
| + | < | ||
| + | |||
| + | Vidimo da se ovom linijom koda vrši poziv određene API funkcionalnosti serverske strane, koja se poziva unošenjem putanje | ||
| + | < | ||
| + | na početnu putanju web stranice. | ||
| + | |||
| + | Ručnim pozivanjem tog API poziva, koji izvršavamo unošenjem punog URL-a: | ||
| + | |||
| + | < | ||
| + | |||
| + | Dobivamo rješenje zadatka prikazano na slici ispod. | ||
| + | |||
| + | {{ : | ||
html-css-js.1709569297.txt.gz · Last modified: 2025/12/01 11:40 (external edit)