Gefälschte Zugriffe im Netz [Hintergrund]

Teil 3: Erklärt: So nutzen Hacker Cross Site Request Forgery für Angriffe

Das Grundgerüst des benötigten Formulars, hier am Beispiel von Börsentransaktionen, könnte zum Beispiel so aussehen:

<form action="Aktien_kaufen.php" method="post"><dl><dt><label for="aktiensymbol">
Aktiensymbol:</label></dt><dd><input type="text"
name="aktiensymbol" id="aktiensymbol" /></dd><dt><label for="anzahl">Anzahl:</label></dt><dd><input type="text" name="anzahl"
id="anzahl" /></dd><dd><input type="submit"
value="Kaufen" /></dd></dl></form>

Dieses Formular wird nur einem zuvor authentifizierten Benutzer angezeigt. Dennoch könnte ein Angreifer mittels XSRF einen Aktienkauf auslösen, sollte es ihm gelingen, einen bereits eingeloggten Benutzer zum Abschicken von Formulardaten an das Skript Aktien_kaufen.php zu bringen. Um einen XSRF-Angriff zu verhindern, wird in dieses Formular ein einmaliger Token (ein Formularschlüssel) eingebaut.

Schritt 2. Zum Erzeugen und Speichern eines eindeutigen Formularschlüssels kommt eine PHP-Klasse zum Einsatz. Hierzu erstellen Sie eine Datei namens formkey.class.php und platzieren Sie diese im Dokumentenverzeichnis des Webservers.

Da jede einzelne Webseite nur einen einzigen Formularschlüssel enthalten darf, könnten Sie auch einen Singleton der PHP-Klasse einsetzen. Der Code zum Erstellen des Formularschlüssels in der PHP-Datei formkey.class.php könnte so aussehen:

class formKey {
private $formKey;
private $alter_formKey;
private function erzeugeKey() {
$ip = $_SERVER['REMOTE_ADDR'];
$uniqid = uniqid(mt_rand(), true);
return md5($ip . $uniqid);
}

Der neu erzeugte Formularschlüssel wird in der Variable $formKey erfasst und der alte Formularschlüssel - falls existent - in $alter_formKey abgespeichert. Mehr dazu im Schritt 5. Das Erstellen eines einmaligen, nicht zu erratenden Formularschlüssels übernimmt die Funktion erzeugeKey().

Hierzu wird im ersten Schritt die IP-Adresse des Anwenders ermittelt, von dem die Anfrage herausgeht, und diese dann mit einer einmaligen Identifikationszahl zu einem MD5-Hash verarbeitet. Dadurch wird verhindert, dass sich das Resultat erraten lässt.Für das Errechnen der Zufallszahl zeichnet statt rand() die Funktion mt_rand() verantwortlich, weil sie bessere Zufallszahlen liefert. Die Option true sogt für eine höhere Länge der Zeichenkette.

Sicherheit: Cross Site Request Forgery

© Archiv

Mittels OWASP CSRF Tester können Sie Ihre Webseiten hinsichtlich CSRF-Risiken überprüfen.

Schritt 3. Der so erzeugte Schlüssel muss in das Formular eingefügt werden. Die benötigte Funktion outputKey() vollzieht dies in drei Teilschritten: Sie initiiert die Erzeugung des Formularschlüssels, speichert ihn für die Dauer der Sitzung ab und gibt ihn aus. Erzeugen und Speichern des Schlüssels innerhalb der Klasse erfolgt mittels:

$this->formKey = $this->erzeugeKey();

Speichern des Formularschlüssels in einer Sitzung:

$_SESSION['form_key'] =
$this->formKey;

Ausgabe des Formularschlüssels:

echo "<input type='hidden'
name='form_key' id='form_key' value='".$this->formKey."' />";

Die Funktion outputKey() nimmt also die folgende Form ein:

public function outputKey() {
$this->formKey = $this->erzeugeKey();
$_SESSION['form_key'] =
$this->formKey;
echo "<input type='hidden'
name='form_key' id='form_key' value='".$this->formKey."' />";
}

Mehr zum Thema

HTML5: Quick Reference Guide
Ratgeber: "HTML5"

Die wichtigsten Tags auf einen Blick: In unserem praktischen Arbeitsblatt finden Sie einen wertvollen Begleiter für die Umstellung Ihrer Webprojekte…
internet, webdesign, google, content, ranking, seo, suchmaschine
Ratgeber: Urheberrecht

Einzigartige Inhalte bieten Lesern Mehrwert und sind ein wichtiges Qualitätsmerkmal. Ärgerlich, wenn sich jemand durch Kopieren an fremden…
Die besten HTML5-Tipps
Neue Tipps & Tricks für blitz.io

Wer die Leistung einer Applikation ermitteln möchte, braucht keine Skripte zu schreiben, sondern kann einen der zahlreichen Online-Dienste…
image.jpg
Ratgeber: Webentwicklung

Die clientseitige Javascript-Entwicklung bietet fast keine Entwicklungsumgebungen und auch keine vernünftigen Werkzeuge zur Fehlersuche. Eine der…
internet, webdesign, meteor, webapplikationen
Ratgeber

Mit Meteor sollen Entwickler in kurzer Zeit Umgebungen für Webapplikationen erstellen können, ohne sich um lästige Details kümmern zu müssen. Wir…