QuiBui LE download

Download QuiBui LE Version 1.5.1 (beta)

Mittwoch, 28. Februar 2007

Lektion 2: MySQL Tabelle auslesen

Widmen wir uns heute einer anderen üblichen Aufgabenstellung aus der PHP-Anwendungsentwicklung: das Auslesen einer MySQL-Tabelle und das Darstellen der Daten.

Beispieltabelle definieren
Damit wir alle wissen, worum es hier geht, möchte ich die Struktur der MySQL-Tabelle definieren.


Tabelle: albums
-----------------------------------------
| jahr | album | verkauft|
-----------------------------------------
| 1981 | Face Value | 19 Mio. |
| 1982 | Hello, I Must Be Going!| 15 Mio. |
| 1985 | No Jacket Required | 32 Mio. |
| 1987 | 12"ers (Remixes) | 1 Mio. |
| 1989 | …But Seriously | 26 Mio. |
| 1989 | Serious Hits… Live! | 22 Mio. |
| 1993 | Both Sides | 10 Mio. |
| 1996 | Dance Into The Light | 5 Mio. |
| 1998 | ...Hits | 15 Mio. |
| 1999 | A Hot Night In Paris | 1 Mio. |
| 1999 | Tarzan-Soundtrack | 2 Mio. |
| 2002 | Testify | 5 Mio. |
| 2003 | Bärenbrüder-Soundtrack | |
| 2004 | Platinum Collection | 1 Mio. |
-----------------------------------------


Nachdem wir eine solche Tabelle erstellt haben (mit phpmyadmin z.B.), ihr den Namen albums gegeben haben und die Daten eingepflegt haben, wollen wir diese in unsere Webseite anzeigen. Um uns nicht mit Design zu beschäftigen, geben wir die Daten ohne Schnickschnack aus.

Unsere Webseite
Die Webseite sieht wie zu Anfang der Lektion 1 aus:

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

Datenbanktabelle auslesen und anzeigen
Wir brauchen die Funktion

QB_TABLE2ARRAY(p1, p2, p3, p4)

Wir verwenden jetzt nur p1. P1 nimmt den Namen der Tabelle.

QB_TABLE2ARRAY('albums')
Jetzt haben wir den gesamten Inhalt der Tabelle zur Verfügung und können ihn darstellen. Dabei nutzen wir die Datenstruktur des assoziativen Arrays und gehen jeden einzelnen Datensatz durch. Unsere Datei sieht also wie folgt aus:


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

<?php

foreach(QB_TABLE2ARRAY('albums') as $album) {
echo $album['jahr'] . " " . $album['album'] . "<br>";
}

?>

</body>
</html>


Fertig
So werden Tabelleninhalte mit QuiBui ausgelesen. Das Ergebnis sieht z.B. so aus:

1981 Face Value
1982 Hello, I Must Be Going!
1985 No Jacket Required
1987 12"ers (Remixes)
1989 ...But Seriously
1989 Serious Hits? Live!
1993 Both Sides
1996 Dance Into The Light
1998 ...Hits
1999 A Hot Night In Paris
1999 Tarzan-Soundtrack
2002 Testify
2003 Bärenbrüder-Soundtrack
2004 Platinum Collection

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>

QuiBui - Installation

QuiBui enthält keine Installationsroutinen. Es kann nach dem Entpacken in ein Verzeichnis und nach Anpassen der Datenbankverbindung (MySQL) einfach mit include eingebunden werden.

Entpacken
Ich empfehle diese Verzeichnisstruktur:

wwwroot
|
- qb
| |
| |- obfuscated
| |
| |- formular.php
| |- functions_inc.php
| |- qb_check_pattern.php
|
|- INSTALLATION.txt
|- mysql_inc.php.example
|- quibui.php.example

Das bedeutet, dass die ZIP-Datei in ein neu angelegtes Verzeichnis qb in das Server-Rootverzeichnis kopiert wird.

Konfigurieren
Es ist die Datei mysql_inc.php.example nach mysql_inc.php zu kopieren und zu editieren:


Die benötigten Daten sind vom Provider zu erfahren. Das sollte man schon machen können, wenn man QuiBui nutzen möchte.


Verwenden
Es sit die Datei quibui.php.example nach quibui.php zu kopieren. Jetzt wird diese und nur diese von der künftigen Anwendung eingebunden:

include_once('/qb/quibui.php');

Obfuscation
QuiBui ist in grossen Teilen "obfusziert", also verschleiert. Praktisch bedeutet es, dass Variablen-, Funktionen- und Konstantennamen neue Namen "von der Stange" bekommen. Dadurch ist es immernoch möglich, den Code zu sichten. Was schwerer gehen sollte, ist dass sich andere was davon aneignen. QuiBui ist nicht Open Source, sondern Freeware.

QuiBui - Vorwort

QuiBui ist eine freundliche Sammlung von PHP-Funktionen, die klassische Aufgaben bei der Anwendungsentwicklung erleichtern.

Schon einmal ein Formular gebaut und dann mit Daten aus einer Datenbank füllen wollen? Sicherlich! Unzählige Versuche finden sich in allen Entwicklerforen und jedes mal ist der Lösungsvorschlag ein anderer. Das Resultat ist fast immer ein unübersichtlicher Salat von PHP-Code und HTML. Der Versuch, Datenbankzugriffe, Design und Sicherheit in eine Datei zu pressen. Und beim nächsten Mal, stehen wir wieder am Anfang...

Ein E-Mailformular fertig erstellt und dann fleissig Spamangriffe geerntet? Sicherlich! Dabei sind es einige Regeln, die es zu beachten gilt um es den Spammern ihre "Arbeit" schon um einiges schwerer bis unmöglich zu machen. Und dazu braucht man keine "habenwollen!"-Kaptchas...

Was ist bei QuiBui anders? Es ist vielleicht nicht die Absicht, damit alle glücklich zu machen. Es ist kein Framework. Es sind einfach nur Funktionen, die ziemlich gezielt genau das machen, was ein PHP-Entwickler braucht, wenn er seine Anwendung konzipiert.