====HTML, CSS I JavaScript==== ===Općenito=== HTML (Hyper Text Markup Language), CSS (Cascading Style Sheets) I JavaScript su tri glavne komponente od kojih se sastoje web stranice. HTML se koristi za strukturu i sadržaj stranice, CSS za uređivanje i pozicioniranje elemenata unutar stranice, a JavaScript kao skriptni programski jezik koji se izvršava na korisničkoj strani. Pri unošenju nekog URL-a u preglednik ili klikom na poveznicu, naše računalo šalje zahtjev za preuzimanje stranice i svih dijelova od kojih je ona sastavljena. Nakon toga poslužitelj šalje kao odgovor HTML dokument, popratni CSS dokument i JavaScript kod. Kada naše računalo preuzme sve ove komponente, naš web preglednik (FireFox, Google Chrome, Safari, …) s pomoću ovih sadržaja sastavlja prikaz web stranice koju nam prikazuje. Sav preuzeti JavaScript kod se izvršava lokalno na našem računalu. __PRIMJER__ - **Zadatak s Hacknite platforme - Raspršeni podatci**\\ Matija nikad nije volio izrađivati web stranice, a nije baš ni volio organizirati podatke na tim stranicama: stavio bi podatke onako kako bi se sjetio. Flag je u formatu CTF2022[brojevi] http://chal.platforma.hacknite.hr:7067 Na primjer, odlaskom na neku web stranicu, u ovom primjeru je stranica Hacknite zadatka „Raspršeni podatci“ korištenjem Google Chromea i otvaranjem ugrađenih razvojnih alata (eng. developer tools), na primjer pritiskom gumba F12, otvara nam se detaljniji prikaz i konzola za pregledom i upravljanjem web stranice i njenih dijelova. Odabirom kartice „Sources“ možemo vidjeti sve datoteke od kojih se sastoji web stranica, kao što je prikazano na slici ispod. {{ :htmlcssjsimage1.png?400 |Datoteke od kojih se sastoji web stranica }} Na slici vidimo tri datoteke, datoteku „(index)“, u kojoj se nalazi HTML kod stranice, datoteku my_style.css u kojem se nalazi kod CSS stila koji web stranica koristi i datoteku my_script.js unutar koje se nalazi JavaScript kod web stranice. Pošto se sve ove datoteke nalaze na našem računalo lokalno, mi možemo mijenjati njihov sadržaj kroz razvojne alate, i te promjene sadržaja će biti prikazane na stranici. Detaljnim pregledom ovih triju datoteka možemo pronaći tri dijela flaga koji se nalaze kao komentari unutar datoteka, te ih zato možemo vidjeti samo direktnim pregledom datoteka, a ne na web stranice. {{ :htmlcssjsimage2.png?400 |(index)}} Prvi dio flaga unutar (index) dokumenta {{ :htmlcssjsimage3.png?400 |my_style.css}} Drugi dio flaga unutar my_style.css dokumenta i hint {{ :htmlcssjsimage4.png?400 |my_script.js}} Treći dio flaga unutar my_script.js dokumenta 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 se reguliralo koje web stranice tražilice smiju indeksirati, moguće je stvoriti datoteku „robots.txt” u kojoj je moguće navesti dozvole i zabrane indeksiranja . Legitimni web crawleri poštuju te dozvole i neće indeksirati stranice koje su u dokumentu „robots.txt” označene kao zabranjene za indeksiranje. U zadatku „Raspršeni podatci“, gdje je hint prikazan na slici 3, „kako zabraniti google – u da indeksira moju stranicu?“, možemo zaključiti da nas hint navodi na pregledavanje robots.txt datoteke. Kako bi dohvatili robots.txt datoteku, moramo na kraj URL-a dodati putanju "/robots.txt". Na link web zadatka: http://chal.platforma.hacknite.hr:7067 dodajemo putanju /robots.txt te je puni URL, zajedno s putanjom: http://chal.platforma.hacknite.hr:7067/robots.txt {{ :htmlcssjsimage5.png?400 |robots.txt dokument}} Na slici vidimo sadržaj datoteke robots.txt, gdje se nalazi zadnji dio flaga, s kojim imamo cijelo rješenje zadatka. Također možemo vidjeti linije: User-agent: * Disallow: /index.html Kojima se svim web crawlerima zabranjuje indeksiranje „/indeks.html“ putanje web stranice, odnosno web crawlerima se zabranjuje pregled i pohrana sadržaja početne stranice u baze podataka web tražilica. Važno je razumjeti da iako legitimni crawleri poštuju robots.txt, on nije sigurnosna mjera. Moguće je napraviti crawler koji ignorira robots.txt. === 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, koji se uz HTML i CSS šalje klijentima, te ga oni koriste na **klijentskoj strani**, ili se može implementirati na **poslužiteljskoj strani**, te se na samoj web stranici ostavi neki način pozivanja funkcije sa serverske strane. Glavna razlika je što samu implementaciju određene funkcionalnosti, koja je na poslužiteljskoj strani, korisnici ne vide, ne znaju kako je izvedena i ne mogu ju mijenjati (osim ako je drugačije zamišljeno), dok sav kod koji poslužitelj šalje korisnicima za korištenje na korisničkoj strani, korisnici mogu po želji analizirati i potencijalno mijenjati. 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, otkrio je na koji način bi to mogao napraviti. U tu svrhu, smislio je jednu jako dobru lozinku i napravio stranicu kako bi testirao tu svoju ideju. Flag je u formatu CTF2021[brojevi] http://chal.platforma.hacknite.hr:10006 Ovaj zadatak ima sličan princip rješavanja prethodnom zadatku. Pri otvaranju linka zadatka, otvara nam se sučelje za unos i provjeru točnosti unesene lozinke. Pri analizi posluženog koda stranice na klijentskoj strani, s pomoću **razvojnih alata (F12)**, nailazimo na HTML