Problem sigurnosti
Svaka složenija web aplikacija se sastoji iz dve komponente - klijentskog i serverskog dela. Iz ovoga proizilazi i njihova najveća slabost. Web aplikacije, pravljene da budu što "ljubaznije" prema korisniku, već neko vreme predstavljaju značajan vektor hakerskog napada na neki sajt, odnosno server.
Najranjivije mesto u funkcionisanju web aplikacije je komunikacija između klijenta i servera. Kao što znamo, HTTP nije "svestan" prethodnog stanja (stateless). Ako ste gledali film "Pre nego što zaspim" (Before I Go to Sleep), znate da se glavna junakinja Kristina, svakog jutra budi sa amnezijom, ne sećajući se ničega od prethodnog dana. Tako svakog jutra mora ponovo da "obnovi" svoj dotadašnji život.
Upravo to se dešava i sa svakim PHP programom na serveru. U trenutku kada se pozove, PHP aplikacija "nema pojma" šta se do tada dešavalo - ni koji korisnik, ni koji podaci su do tada bili uneti. Svaki put, program mora da krene ispočetka, prikupljajući svaki delić informacije - nešto iz globalnih promenljivih, nešto iz kolačića, a najveći deo preko GET i POST parametara.
Upravo ta konstantna razmena podataka, odnosno potreba da se na server šalju podaci na obradu ili rad sa bazom podataka, predstavlja metu hakerskog napada. Klijentski deo aplikacije (JavaScript) je zadužen da pripremi i pošalje podatke, ali kada ih jednom pošalje, nad njima se gubi svaka kontrola. Drugim rečima, napadač može zaustaviti zahtev upućen serverskom delu aplikacije i izmeniti parametre u nešto sasvim neočekivano. Haker čak ne mora ni da ulazi na naš sajt, dovoljno je da prosleđuje GET parametre kako želi.
Zavisno od toga kako smo pripremili program na serveru i na koji način se vrši "čišćenje" i validacija ulaznih parametara, web aplikacija će biti više ili manje ranjiva na napade.
Ovi napadi mogu biti fokusirani na druge korisnike i krađu sesije, pokušaj iščitavanja nekog fajla sa servera ili napad na bazu podataka.
Ne zaboravite - dok je serverski deo sakriven, sve što se nalazi na klijentu, (JavaScript program) potpuno je dostupno i otvoreno za analizu.