BLOG

Sigurnost web aplikacije

Autor: Josip Jelić, 21.08.2009.

Koliko pažnje posvećujete sigurnosti Vaše web aplikacije? Da li ste svjesni opasnosti od napada od strane malicioznih skripti ili korisnika? Da li ste upoznati s načinima zaštite i metodologijom borbe protiv 5 najčešćih web napada?

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.

Što može poći po zlu ako netko uspije "probiti" zaštitne mehanizme servera i aplikacije?

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.

Kako sustavno pristupiti rješavanju ovih problema?

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.