Dieser Artikel soll dazu dienen, das Sicherheitsverstaendnis rund um PHP etwas wachzuruetteln.
Er ist in mehrere Teile geteilt, da ich nicht alles auf einmal schreibe und so immer wieder etwas hinzukommt.
PHP ist relativ einfach zu erlernen und wird dementsprechend von vielen Webmastern zur Gestaltung ihrer Webseiten eingesetzt.
Vorallem normale Surfer finden meist voellig zufaellig Sicherheitsluecken in Scripten und nicht wie meistens angenommen von boesen Hackern, die eure Seite manipulieren wollen. Auch die Einstellung,
das niemand seine Seite nach Sicherheitsluecken durchsucht um damit Unsinn zu treiben entzieht
einem nicht die Verantwortung seines Codes.
Traue niemals deinen Usern
Dies ist die am einfachsten zu merkende und sogleich am meisten vergessene Regel, die ein Programmierer
beherzigen sollte.
Vertraue nicht darauf das der User alles genau so ausfuellt oder durchklickt wie du es vorgesehen hast.
Den Jeder User deiner Seite verhaelt sich meistens nicht so wie du dir das vorstellst
Problem Globale Variablen
In den meisten Programmiersprachen ist es noetig Variablen zu definieren. Nicht so in PHP. In PHP kann in
der php.ini ueber die Einstellung “register_globals” diese Deklaration umgangen werden.
Nicht so schlimm denkt ihr?
Schauen wir uns einmal ein Beispiel an :
1 if ($pw == “das_passwort”) {
2 $authorized = 1;
3 }
4
5 if ($authorized == 1) {
6 echo “Hier gibts die Downloads!”;
7 }
Viele denken das sieht so gut aus und es funktioniert ja auch. Jedoch kann falls der Server “register_globals”
eingeschalten hat ueber den einfachen Aufruf “?authorized=1″ der Passwort-Schutz umgangen werden.
Jedoch kann dieses Problem ganz einfach eigentlich mit etwas Ueberlegung sicherer gemacht werden.
Setzt man am Anfang des Codes $authorized = 0; ist der Fehler bereits abgefangen.
1 $authorized = 0;
2 if ($pw == “das_passwort”) {
3 $authorized = 1;
4 }
5
6 if ($authorized == 1) {
7 echo “Hier gibts die Downloads!”;
8 }
Fehlermeldungen
Fehlermeldungen sind eigentlich ganz nuetzlich. Programmierer benoetigen Sie um Bugs herauszufinden, Hacker um
Sicherheitsloecher zu finden. Finden Hacker auf ihre Seiten mit Fehlermeldungen vor, so koennen sie evtl. aus
dieser Informationen beziehen, die es ihnen erleichtern ihr System zu kompromitieren.
Diese Eigenschaft von PHP wird ueber die Einstellung “error_reporting” gesteuert.
SQL-Injection
Eine der groessten Staerken von PHP ist der einfach Umgang mit Datenbanken. In PHP ist es einfach Datenbanken
auszulesen, zu modifizieren oder zu erstellen.
Hier gilt allerdings ebenfalls : Schlampig programmiert koennen doch relativ einfach ungewollt Daten ausgelesen
oder modifiziert werden.
Auch hierzu ein kleines Anschaungsbeispiel :
1 $check = mysql_query(”SELECT Username, Passwort, Berechtigung FROM Benutzer WHERE Username = ‘”.$_POST['username'].”‘ and Password = ‘”.$_POST['password'].”‘”);
Diese simple und auf den ersten Blick voellig korrekt und funktionierende Abfrage hat leider einen kleinen Schoenheitsfehler
der sich ziemlich arg auswirken kann.
Tippt man nun einfach im Feld Username “‘ OR 1=1 #” ein, dann ergibt sich ploetzlich folgende Abfrage :
1 $check = mysql_query(”SELECT Username, Passwort, Berechtigung FROM Benutzer WHERE Username = ‘”‘ OR 1=1 #”‘ and Password = ‘”.$_POST['password'].”‘”);
Die Raute symbolisiert in PHP Kommentare und somit wird alles nach der Raute von der Abfrage abgeschnitten und die einfach Abfrage
1 $check = mysql_query(”SELECT Username, Passwort, Berechtigung FROM Benutzer WHERE Username = ‘”‘ OR 1=1
gibt nun einfach alle User mit Passwort und Berechtigung aus, da 1=1 immer wahr ist.
Mit etwas Phantasie kann obiges Beispiel erweitert werden, um User zu loeschen, anzulegen oder einfach nur Daten wie Kreditkartennummern etc. auszulesen.
Um dieses Problem zu umgehen muessen die Eingabedaten bevor sie als Abfrage ausgefuehrt werden geprueft werden. Mit einer einfachen Funktion fangen wir deshalb die Apostrophe ab, damit niemand seinen eigenen Code ausfuehren lassen kann
1 function make_safe($variable) {
2 $variable = addslashes(trim($variable));
3 return $variable;
4 }
Zum Schluss
Hab nun gemerkt das dieser Text doch etwas laenger wird, deshalb werde ich ihn in mehrere Teile aufsplitten.
Schaut immer wieder rein um aktuell zu sein ![]()

















April 25th, 2007 at 15:58
WUSA, das mitm SQL-Hack hani bis etz nonig mol so gnau ueberleit… mues glaubs mini scripts nomel ueberprueefe.
Noed das wieder son clown chunt und mini DBs ussuuget (gell masty ;))
geili sach, mach wiiter mit dem Bricht, findi no interesting!
HAND, Jyn-X
April 30th, 2007 at 10:41
jo ich au
chunt sicher bald dae 2.Teil! chasch di scho freue 