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.

© 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 lesen

Chronologische Liste und Netflix-Links -

Neuerscheinungen in der Übersicht -

Vorschau auf Film- und Serien-Highlights -

Mehr zum Thema

Webdesign

Adobe Illustrator wird im Webdesign immer beliebter. Wie Sie das Tool richtig einsetzen, erfahren Sie hier.
Facebook

Was sind die Implikationen für Unternehmen und Endanwender bei Facebooks neuer Suche Graph Search?
Online-Recht

Allgemeine Geschäftsbedingungen liest sich niemand gerne durch. Sie sind jedoch notwendig und äußerst sinnvoll. Worauf sie achten sollten.
Online-Recht in der Cloud

Dateien werden immer häufiger in der Cloud bereitgestellt. Rechtlich ist das jedoch durchaus problematisch. Wir klären über das Urheberrecht in der…
E-Commerce-Logistik

Für den Erfolg eines Online-Shops sind zahlreiche Faktoren verantwortlich. Neben Produktvielfalt und Darstellung der Waren gehört auch die Logistik.