QuiBui LE download

Download QuiBui LE Version 1.5.1 (beta)

Donnerstag, 22. Februar 2007

Lektion 1: Hallo NAME

Fangen wir mit einer trivialen Sache an, die unter PHP höchst sicherheitskritisch ist: Eingabe und Ausgabe von Formulardaten.

Was ist hier sicherheitskritisch? Nun, es ist die Stelle, an der die üblichen XSS-Defacements ansetzen. Wie verbreitet diese Falle ist, ist hier schön zu beobachten:

http://baseportal.com/baseportal/phishmarkt/de

Datei anlegen
Aber schauen wir uns erst einmal unsere PHP-Datei an. Sie enthält erst den QuiBui-Aufruf.


<?php
include_once('../quibui/quibui.php');
?>


Wir speichern diese in ein Verzeichnis lektion_1 auf dem Server ab. Wenn diese Datei jetzt aufgerufen wird, passiert... gar nichts.

Ein Formular, zum Testen
Jetzt erstellen wir ein minimalistisches Formular, um die Übertragung und die Ausgabe von Daten durchzuspielen. Meine Datei sieht jetzt so aus:

<?php
include_once('../quibui/quibui.php');
?>
<html>
<body>

<form method="POST" action="">
<input type="text" name="MEINNAME">
<input type="submit" value="Senden">
</form>

</body>
</html>
Falls nicht klar ist, was diese Zeilen machen, sollte von der Verwendung von QuiBui abgesehen werden und mit dem 1 mal 1 angefangen werden: HTML (SELFHTML).

Rufen wir diese Seite jetzt auf und geben in das Feld was ein, dann wandert die Eingabe beim Klicken des Knopfes Senden wieder zu diese Seite zurück, da wir dem Formular keinen action-Parameter mitgegeben haben. Für unsere Zwecke ist das aber sehr schön so, denn wir können gleich im selben Formular die gesendeten Daten empfangen.

POST und GET Daten auslesen
Jetzt kommen die Daten aus dem Formular also wohl an. Nun müssen wir sie nur noch sichtbar und nutzbar machen. Dazu machen wir Bekanntschaft mit einem Allrounder aus den QuiBui-Funktionen:

QB_HTTPVARS2ARRAY(p1, p2)

Diese Funktion sammelt für uns umherfliegende GET und POST-Daten (und einige mehr, doch darüber später) ein und stellt sie uns zur Verfügung. Fragen wir die Funktion parameterlos ab, dann bekommen wir ein assoziatives Array mit allen gesammelten Daten. In unserem Fall möchten wir aber nur den Inhalt des Feldes mit dem Namen MEINNAME haben:

QB_HTTPVARS2ARRAY('MEINNAME');


Diese neue Zeile fügen wir unserer Datei hinzu:


<?php
include_once('../quibui/quibui.php');
echo QB_HTTPVARS2ARRAY('MEINNAME');
?>

<html>
<body>

<form method="POST" action="">
<input type="text" name="MEINNAME">
<input type="submit" value="Senden">
</form>

</body>
</html>
Damit geben wir den Inhalt des Feldes aus. Die Funktion kann den Wert auch anzeigen, wenn dieser über GET übertragen wurde.

Ausgabe sichern
Wir haben zum Anfang gesehen, wie sich ungeschützte Ausgaben missbrauchen lassen. Um das mit unserem Beispiel - und später generell mit allen Ausgaben - nicht zu ermöglichen, verwenden wir die Funktion

QB_SECUREPRINT(p1, p2)

Sodass die Datei zum Schluss so aussieht:


<?php
include_once('../quibui/quibui.php');
echo QB_SECUREPRINT(QB_HTTPVARS2ARRAY('MEINNAME'));
?>

<html>
<body>

<form method="POST" action="">
<input type="text" name="MEINNAME">
<input type="submit" value="Senden">
</form>

</body>
</html>

Keine Kommentare: