Sigurnost PHP aplikacija

Ovo je prvi u budućoj seriji članaka o sigurnosti PHP aplikacija. Očekuje vas uvod u osnove, filtriranje inputa, eskejpovanje outputa, sigurnost baze podataka i još dosta zanimljivosti.

Jedna od duhovitih činjenica o PHP-u je da su njegove funkcije pisane pod raznim okolnostima, ponekad i u alkoholisanom stanju. Uzevši i u obzir da je softver otvorenog koda, oni trezni mogu pronaći greške i kritikovati kako je PHP pun sigurnostnih propusta. To je donekle i tačno, ali takav sistem omogućava rešavanje tih propusta i sa svakom novom verzijom platforma postaje sve sigurnija. Međutim, najčešći krivci za sigurnosne propuste nije PHP platforma, već isključivo programeri aplikacija.

Lakoća programskog jezika, mogućnost da se neki proces odradi na mnogo načina ili vremensko ograničenje mogu biti uzroci takvih grešaka, ali za sigurnost svakako treba odvojiti vremena i steći dobre navike. Ne biste valjda rizikovali da vaša baza podataka bude ukradena, vaši korisnici izloženi riziku ili da ceo vaš online biznis propadne preko noći zbog jedne linije u kodu?

Na sigurnost ne treba gledati kao na karakteristiku, već na kao proces koji se treba stalno usavršavati i dorađivati i naročito ulagati u njega. Veoma često se dešava da programeri tokom razvoja aplikacije ignorišu sigurnost i trude se da aplikacija “proradi”, a sigurnost ostavljaju za kasniju fazu, koja uglavnom nikada i neće doći na red. To je veoma pogrešan pristup i treba imati uvek na umu da nije dovoljno dobro ako aplikacija radi ono što smo zamislili, već i da bude otporna na napade i da pravilno upravlja greškama. Dakle, sigurnost aplikacije treba uzimati u obzir u ranim fazama razvoja i već pri projektovanju napraviti dobar koncept kojeg se treba pridržavati tokom celog razvoja. Takav koncept, svakako, treba sadržati sledeću metadologiju:

  • Bezbednost aplikativne arhitekture
  • Upravljanje greškama
  • Filtriranje i validacija inputa
  • Testiranje

Sigurnost naše aplikacije zavisi i od sigurnosti servera na kojem se nalazi. Ukoliko takav server poseduje zastreo i ranjiv softver, velika je verovatnoća da je i naša aplikacija i baza podataka ugrožena. Svakako je najbolje rešenje imati celoukpnu kontrolu nad serverom i voditi računa da je softver uvek “up to date”.  Međutim, često to iz finansijskih razloga nije moguće pa smo opredeljeni za zakup hostinga na nekom serveru. U tom slučaju uvek birati kvalitetne i proverene hosting provajdere koji imaju ozbiljan pristup bezbednosti aplikativnog softvera, ne uzdati se previše u njihove sisteme bekapa podataka, već samostalno brinuti o tome.

Projektovanje sistema za upravljanje greškama treba uzeti u obzir u najranijoj fazi izgradnje aplikacije, a prilikom razvoja oslanjati se na taj sistem. Dobar sistem za upravljanje greškama treba da sadrži sa jedne strane obaveštenje za korisnike o nastaloj grešci, koja ne sadrži nikakve tehničke detalje o toj grešci, a sa druge strane, obaveštenje za programere koje sadrži što više tehničkih detalja koji otkrivaju uzrok greške i mesto nastanka. Svakako, treba uzeti u obzir i alate koji služe za pronalaženje grešaka.

Sledeći važnan faktor je filtriranja inputa i to je najvredniji savet koga se treba pridržavati. Uvek treba razmišljati u kritičnom stavu, osmisliti najgori scenario i sprečiti ga. Korisniku nikada ne treba verovati i to uvek treba imati na umu. Filtrirati svaki input, proveravati i najmanje moguće greške kao što su dužina stringa i slične, i nikada se ne uzdati u mogućnost HTML-a i JavaScripta za validaciju inputa. Koliko god dobro zaštitili našu formu JavaScript funkcijama, one uvek mogu biti zaobiđene, kao i sve što se izvršava na klijentskoj strani.

Bezbednost se može najlakše podići na viši nivo prostim testiranjem. Jednostavno, razmišljajte kao napadač, uzmite u obzir sve moguće scenarije i na taj način koristite aplikaciju. Krenite od prostih stvari – isključite JavaScript i pošaljite prazan formular, unesite neispravne podatke,  pokušajte SQL Injection.  U narednim člancima će biti opisane najčešće korišćene metode napada, pa isprobajte svaku nad vašom aplikacijom. Ukoliko otkrijete i najmanji mogući propust, rešite ga odmah.

Sledeći članak na temu “Sigurnost web aplikacija” se bavi problemom filtriranja podataka i validacije inputa. Na konkretnim primerima će biti prikazane česte greške koje programeri prave, ukazivanje na bitnost tih grešaka, kao i načini rešavanja istih. Stay tuned.

6 Comments

  1. Srećno! 🙂

  2. Srecno sa blogovanjem. 🙂 Ocekujem jos zanimljivih i korisnih postova.

  3. Samo cepaj 🙂 i nemoj dugo ga cekamo sledeci post 😉

  4. Puno srece! 🙂

    oblacak

  5. Super uvod! Samo napred!

  6. Ne verujem da si konacno postavio blog! 😀

    Sjajno! 😀 Samo napred i nadamo se da ces redovno da pises!!! 🙂