Autor: Josip Jelić, 21.08.2009.
Prilikom izrade web aplikacija mnogi klijenti nisu upoznati s potencijalnim problemima koji mogu nastati zbog nedovoljno sigurnog kôda aplikacije. Web aplikacije su često rađene nestručno te su podložne raznim napadima kao što su:
1. SQL Injection (Wikipedia: SQL Injection) - Uporabom ove tehnike moguće je, neregistriranom korisniku, dobiti administratorske ovlasti nad sustavom ili obrisati sve podatke iz neke od tablica u bazi na serveru. Način obrane od ove vrste napada je pravilno rukovanje svim podacima koje korisnik unosi kroz razne web forme (logiranje, komentari i sl.) na način da se svi ulazni podaci "čiste" određenim metodama (mysql_real_escape_string - PHP manual).
2. Sigurnost lozinki u sustavu - Metode spremanja korisničkih lozinki u bazu podataka vrlo često su u običnom tekstualnom formatu ili enkriptirane relativno nesigurnim md5 algoritmom. U ovom slučaju dodatnu sigurnost postižemo koristeći SALT (Wikipedia: SALT - cryptography) mehanizme na enkripciju lozinke u tablici, te na taj način bez poznavanja SALT parametara onemogućujemo potencijalnom napadaču "razbijanje" lozinke.
3. Aplikacijske i konfiguracijske datoteke izvan dohvata korisnika - Držeći sve PHP datoteke (konfiguracijske podatke i kôd stranice) izvan dohvata korisnika spriječavamo zloupotrebu prilikom eventualnog pada PHP servisa na serveru te potencijalno omogućenog pristupa svim datotekama u webroot-u (direktorij dostupan za čitanje svim korisnicima Interneta). Naljbolja praksa je da u webroot-u držimo samo datoteke sa slikama, css i javascript datoteke.
4. Cross site scripting (XSS) Wikipedia: Cross site scripting - Dozvoljava malicioznim korisnicima da putem web formi ubacuju kod u stranicu te pozivaju udaljene datoteke (smještene na drugim serverima) te na taj način mogu doći do osjetljivih podataka u cookie i session varijablama i tako ostvariti administratorske ovlasti u sustavu.
5. RFI (Remote file inclusion) Wikipedia: Remote file inclusion - Dozvoljava malicioznim korisnicima da na jednostavan način naprave neovlašteni poziv na udaljenu datoteku te na taj način izvedu neovlašteni kod smješten negdje na njihov vlastitom serveru. Protiv ovog napada borimo se isključivanjem register_globals opcije u konfiguraciji PHP-a. Neke određene ekstenzije za neke CMS-ove zahtjevaju da ova opcija bude uključena te tako nepotrebno izlažu cijelu aplikaciju potencijalnim napadačima.
Mogućnosti napada još je daleko više nego što sam ovdje naveo no inteligentim rješenjima unutar same konfiguracije PHP-a (register_globals = off, magic_quotes = off i sl. - više na: phpsec.org) i korištenjem najboljih praksi "best practice" prilikom programiranja aplikacije moguće je svesti sve ove mogućnosti neovlaštenih upada na najmanju moguću mjeru.
Neovlaštenim upadom u CMS aplikaciju maliciozni korisnik može pristupiti osjetljivim podacima iz Vašeg web shopa, može obrisati sve artikle i podatke o online kupcima ili iz čiste zlobe potpuno obrisati sve vijesti, komentare, fotogalerije i sl. te Vas vratiti nekoliko godina unazad. Istina je da većina servera ima tjedni ili dnevni backup podataka pa ćete vjerovatno uspjeti vratiti podatke, no šlampavo napisana aplikacija je loša reklama za vašu uslugu.
Za sustavno rješavanje sigurnosnih problema svakako je potrebno stalno informiranje o novim vrstama napada te korištenje nekog od PHP "frameworka" (Kohana, CodeIgniter, CakePHP, Zend framework, ...) koji se, uz ostale funkcije, na određeni način brinu i o filtriranju svih ulaznih podataka od strane korisnika.