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;