Gefälschte Zugriffe im Netz [Hintergrund]

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

Schritt 4. Das Formular aus dem ersten Schritt kann jetzt mit dem FormularschlüsSicherheitstools sel gesichert werden. Hierzu fügen Sie der PHP-Datei oberhalb der doctype- und head-Tags den folgenden Quelltext hinzu:

session_start();
require('formkey.class.php');
$formKey = new formKey();

Mittels session_start() wird die Sitzung initialisiert, damit der zu erzeugende Schlüssel abgespeichert werden kann. Hierzu wird die eben erstellte Klasse aus formkey.class.php mittels require eingebunden. Danach wird die Klasse mit dem Aufruf des neuen Formularschlüssels initialisiert und in $formKey erfasst. Nun gilt es lediglich, das Formular mit dem Formularschlüssel zu versehen:

<?php $formKey->outputKey(); ?>
in das Formular eingefügt:<form action="Aktien_kaufen.php" method="post"><dl><?php $formKey->outputKey(); ?><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>

Schritt 5. Da die Funktion erzeugeKey() die Sitzungsvariable überschreibt, müssen wir einen Konstruktor zu unserer PHP-Klasse hinzufügen, der beim Aufruf der PHP-Klasse zum Einsatz kommt. Der Konstruktur wird den vorigen Schlüssel - falls vorhanden - in einer Klassenvariable abspeichern, bevor ihn der neue Formularschlüssel überschreiben kann. Auf diese Weise steht der zuletzt gültige Formularschlüssel für eine Validierung zur Verfügung. Die PHP-Klasse wird um die folgende Funktion ergänzt:

function __construct() {
if(isset($_SESSION['form_key'])) {
$this->alt_formKey = $_SESSION['
form_key']; }
}

Der Name des Konstruktors beginnt mit einem Unterstrich, damit der Quelltext leichter zu lesen ist. Beim Aufruf des Konstruktors erfolgt erst einmal eine Prüfung, ob die Sitzung überhaupt eingerichtet wurde und falls ja, wird der alte Schlüssel der Sitzung lokal in der Variable alt_formKey erfasst. Um den Formularschlüssel validieren zu können, erzeugen Sie jetzt eine Funktion innerhalb der Klasse.Da Sie auf diese Funktion auch von außerhalb der Klasse zugreifen werden, sollten Sie diese als public deklarieren. Der Zweck der Funktion besteht in der Validierung des POST-Wertes des Formularschlüssels, indem dieser mit dem gespeicherten Wert des Formularschlüssels aus der alten Sitzungsvariable verglichen wird. Die benötigte Funktion wird nun wie folgt der PHP-Klasse hinzugefügt:

Sicherheit: Cross Site Request Forgery

© Archiv

Ohne die passenden Sicherheitsvorkehrungen wie dynamisch erzeugte Tokens kann ein harmlos aussehendes Formular Angreifern praktisch uneingeschränkten Zugriff auf interne Funktionen der Web-Applikation gewähren, die authentifizierten Benutzern vorbehalten sein sollten.
public function validieren() {
if($_POST['form_key'] ==
$this->alt_formKey) { return true; }
else { return false; }
}

Ist der Schlüssel gültig, liefert die Funktion den Rückgabewert true, andernfalls false.

Die Validierung des Formularschlüssels erfolgt durch den Aufruf der gerade erstellten Funktion validieren(). Zu beachten ist hierbei lediglich, dass Sie die Validierung erst nach der POST-Anfrage durchführen dürfen. Hierzu fügen Sie hinter die folgende Zeile

$formKey=new formKey();

diesen Quelltext ein:

$error = 'Kein Fehler';
if($_SERVER['REQUEST_
METHOD'] == 'post') {
if(!isset($_POST['form_key']) ||
!$formKey->validieren()) {
$statusmeldung = 'Fehler'; }
else { $statusmeldung = 'kein Fehler
aufgetreten.'; }
}

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 Ergebnissen…
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 einspannen.…
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…