CSRF támadások és a védekezés ellenük
Néhány napja megjelent egy érdekes cikk a Coding Horror oldalán a CSRF támadásokról, támadhatóságokról. Megdöbbentő a kiemelt négy oldal (számomra különösen az ING), érdekes végiggondolni, hogy a hazai pénzintézetek hogyan állnak ezen a téren.
A cikk konkluzióját messzemenőkig támogatom, aki webfejlesztésre adja a fejét, annak kutya kötelessége ismerni és védekezni ellene. Összeszedtem néhány linket / oldalt az évek során, ezt szeretném megosztani. Magáról a CSRF támadásról olvashatsz (bevezetőt) a Wikipedián. Általában PHP-s biztonsági kérdések miértjéről (benne a CSRF-ről) olvashatsz egy zseniális ferdeszeműtől. Az oldal egyébként Terry Chay stílusát ismerve linkgyűjteménynek sem utolsó.
Általános PHP biztonsági kérdésekről a phpsec.org oldalán találsz átfogó leírást. Végül egy könyv, amit el kell olvasnod.
Csak hogy a symfony-t is belekeverjem a dologba, nem véletlenül van benne az sfForm osztályban a CSRF elleni védelem támogatás, és nem véletlenül van bekapcsolva alapértelmezetten. Hasznos, ha az ember megismerkedik és megbarátkozik a használatával (a globális ki-be kapcsolhatóság miatt kissé érdekesen tud működni). Arra érdemes figyelni, hogy a templateben is szerepeljen a CSRF token hidden mezője:
// symfony 1.1 echo $form[sfForm::getCSRFFieldName()] // symfony 1.2 - ez mellesleg minden rejtett mezőt renderel egy lépésben echo $form->renderHiddenFields()
Illetve, hogy bind()-elésnél a token is legyen átadva. Végül érdemes kiíratni a globális hibákat, mert a token hiánya globális hibaként jelenik meg a formban:
if ($form->hasGlobalErrors()) : echo $form->renderGlobalErrors() endif;