A ZCE PHP 5.3 felkészülés 3. rész


Zend - The PHP Company

A biztonságos PHP programozás alapelvei

A Zend PHP Engineer Certificate vizsgának egyik fontos fejezete a biztonság. Ebbe a témakörbe tartozó kérédések nagyobb prioritást élveznek a többivel szemben, tehát érdemes jól tisztában lenni vele. Nem csak a vizsgakérdések miatt, hiszen a biztonság figyelembe vétele nélkül nem tudunk megbízható alkalmazásokat készíteni, legyen az egyszerű vagy bármilyen összetett is!

A Zend a vizsgára a következő témaköröket ajánlja áttekintésre:

  • Konfiguráció
  • Session biztonság
  • Cross-Site Scripting (XSS)
  • Cross-Site Request Forgeries (CSRF)
  • Sql beszúrásos támadás
  • Távoli kódbeillesztés
  • Email beszúrás
  • Bemenetei adatok szűrése
  • Kimeneti adatok kezelése
  • Kódolás, Hash algoritmusok

Kedvezmény a vizsga árából!
Zend Kuponkódok

A biztonsággal kapcsolatos alapelvek:

  1. Az alapkoncepció, hogy minden bemenő adat gyanús és ennek megfelelően kell eljárni, vagyis használat előtt meg kell szűrni a bejövő adatot, a kimenetet pedig escape karakterrel kell ellátnunk. Semmilyen bejövő adatban nem szabad megbíznunk, minden bejövő adat potenciálisan fertőzött! Tipikus példa erre a felhasználó által manipulált adat, ami javascript kódot tartalmazva a böngészővel olyan műveleteket végeztet, amit nem szeretnénk, illetve káros következményei lehetnek. Minden superglobális változó tartalmát szintén ilyen gyanakodással kell kezelnünk. Egyedüli kivétel ez alól a SESSION változó lehet, mert ez csak az adott munkamenetre él. A szűrésre számos eszközt használhatunk, például a PHP ctype vagy  filter_var függvényeket vagy reguláris kifejezéseket. Másik alapvető biztonsági elv, hogy soha ne bízzuk az ellenőrzést és a szűrést csak a kliens oldalra. Minden esetben végezzük azt el  a szerver oldalon is!
  2. A biztonságra a kimenetnél is szükség van, mivel tartalmazhat olyan karaktereket is, amelyeket nem szeretnénk. A böngésző vagy az adatbázis szerver részére szóló utasításokat. A böngészőnek szóló utasításokat a htmlentities illetve a htmlspecialchars függvényekkel tudjuk szűrni. Ez segítséget jelenthet az XSS támadásokkal szemben. Az adatbázis adatait beszúró/módosító/lekérdező utasítások futtatásánál szintén kötelezően használjuk a szűrési lehetőségeket. (adatbázis típusa_escape_string függvényeket) Ezzel az SQL injection típusú támadásokat tudjuk elkerülni.
  3. Globális változók kikapcsolása! szintén kötelező, ha növelni szeretnénk a biztonságot.(A PHP 4.2.0 és újabb verzióinál ez alapértelmezetten ki van kapcsolva) Ha nem adunk kezdőértéket a változóinknak és ez bekapcsolva marad akkor szintén rosszindulatú  támadásoknak tehetjük ki a kódunkat.
  4. A jelszavakat soha ne tároljuk sima szövegként, mindig kódoljuk.
  5. Az SSL kapcsolatot használva a biztonságot növelhetjük, ha lehet és szükség van rá, használjuk.

Jellemző támadások és a védekezési módszerek:

  • A CSRF támadások, amelyeknek alapja egy meghamisított HTTP kérés és úgy tűnik, mintha a hitelesített felhasználó kérné. A kivédésére használjhatjunk az adataink bekérése során egy ellenőrző kódot, ami a formunkat azonosítja. Ha ez nem egyezik akkor kikényszerítjük az újbóli hitelesítést.
  • Az XSS támadás, amely idegen, ártó szándékú Javascript kód futtatását eredményezi kivédhetjük, ha szintén szűrjük az adatainkat, illetve a session.cookie_httponly változót beállítjuk, amivel csak http kéréseken keresztül engedjük elérni a cookie-kat.
  • A session jellgű támadások kivédésére bizonyos fontos műveletek előtt generáljuk újra a session azonosítót. Célszerű, ha figyeljük az user-agent változót és ha ez változik kikényszeríthetjük az újbóli belépést, (használat közben böngészőt vált a felhasználó). A session.use_only_cookies -t pedig engedélyezzük, így az azonosító csak cookieban tárolódik. A php.ini ben vagy a session_name(str) függvénnyel lehetőségünk van a session azonosítónak más nevet adni, mint PHPSESSID, ezt célszerű ha valami másra állítjuk (session.name).
  • A Remote Code Injection támatások miatt körültekintően használjuk a távoli url -ek használatát (allow_url_fopen) Bizonyos könyvtárak hozzáférését engedélyezzük csak, illetve biztonsági okokból le is tilthatunk bizonyos függvények használatát (exec, passthru, system, shell_exec)
  • Email injection jellegű támadások: Például egy kapcsolatfelvételi formon keresztül spameket küldhetnek (az ott beállított felhasználó nevével, email címével.) úgy, hogy erről nem is tudunk. A megoldás, hogy minden bejövő adatot itt is megszűrünk. Felállítunk egy listát, amit megengedünk. Ha olyan adat érkezne ami nem szerepel a listában, nem engedjük be.

Ide kapcsolódó függvények:

strip_tags(), htmlspecialchars(), htmlentities(), stripslashes(), escapeshellcmd(), escapeshellarg(), filter_var(), filter_input(), filter_input_array(), filter_var_array(), preg függvények

A PHP képesítéshez kapcsolódó hasznos online anyagok a Zend oldaláról

Digg This
Reddit This
Stumble Now!
Buzz This
Vote on DZone
Share on Facebook
Bookmark this on Delicious
Kick It on DotNetKicks.com
Shout it
Share on LinkedIn
Bookmark this on Technorati
Post on Twitter


A bejegyzés kategóriája:Zend PHP Certificate and tagged . Vedd fel a kedvencek közé: link. Szólj hozzá vagy hagyj egy trackback-et:Trackback URL.

Szólj hozzá

Hozzászólás küldéséhez Be kell jelentkezni