Kategorie PHP

Zend Framework: Schutz gegen CSRF-Angriffe

Lesezeit ca. 2 Min.

Zend Framework: Schutz gegen CSRF-Angriffe – In einem Projekt wollte ich in Formularen einen Schutz gegen CSRF-Angriffe implementieren. Die Formulare wurden mit Zend Form erstellt. Dazu bietet das Zend Framework eine einfach zu integrierendes Element namens Zend_Form_Element_Hash() an. Damit wird in das Formular ein verstecktes Feld mit einer Session ID eingebaut. Doch nach der Implementierung scheiterte das Formular an der internen Validierung und gab als Fehler aus, dass das neue Feld nicht leer sein dürfe.

CSRF steht für “Cross-Site-Request-Forgery” und beschreibt einen Angriff auf ein Computersystem durch die Nutzung einer bestehenden Transaktion. Bei Web Seiten geschieht dies, indem ein Hacker Zugriff auf Session Daten erhält und so tut, als wäre er der Benutzer, der die Session eröffnet hat. Dieses Verfahren wird auch “Session Riding” genannt. Es gibt auch noch andere Möglichkeiten für CSRF Angriffe, die ich hier nicht näher erläutern möchte.

Jedenfalls wollte ich die Formulare einer Web Anwendung mit Hilfe von einem versteckten Hash Element gegen CSRF Angriffe schützen. Das Problem tritt nur auf, wenn man bei der Erstellung des Formulars keine Zend Dekoratoren verwendet, sondern in den Views jedes Formularelement einzeln ausgibt. Um in der Darstellung des Layout flexibler zu sein, verwende ich in den meisten Fällen diese Technik. Und so kam es dazu, dass der Form Validator für das Hash Feld eine Fehlermeldung ausgab. Der Fehler besagte: “Value is required and can’t be empty”, also erwartete der Validator, dass das Hash Feld nicht leer ist.

In einem solchen Fall muß man natürlich auch das versteckte Feld in der View ausgeben, weil ansonsten bei einem Submit der generierte Hash nicht mit übertragen wird. Dies erklärt dann auch die Fehlermeldung. Der Formular Validator weiß, dass ein Hash Feld definiert wurde und merkt, daß ihm kein solches Feld übergeben wird. Er muss dann davon ausgehen, dass ein CSRF Angriff stattgefunden hat. Richtigerweise hat der Validator die Ausführung des Formulars und damit die Übergabe der Daten an eine Datenbank verhindert.

Somit bleibt festzuhalten, daß in einem solchen Fall in der View für das Formular die folgende Zeile nicht fehlen darf:

<?php echo $form->no_csrf->renderViewHelper(); ?>

Zend Framework: Schutz gegen CSRF-Angriffe

Ähnliche Artikel:

Fragen oder Feedback zu diesem Artikel

Deine E-Mail-Adresse wird nicht veröffentlicht.