Wie wir ja schon im Grundlagen-Teil gesehen haben lässt sich auch ohne Datenvalidierung schnell ein lauffähiges PHP-Programm schreiben. Gerade in der schnellen Erlernbarkeit von PHP liegt also ein erstes mögliches Sicherheitsproblem. Denn nach dem die Grundlagen erlernt wurden, wird einfach darauf los "Programmiert" und man bastelt sich auf einem eigentlich sicherem Webserver schnell selbst eine Sicherheitslücke, wie z.B. der Zugriff auf Dateien ohne Berechtigung. Daher sollte sich jeder mit der Sicherheit von PHP-Programmen beschäftigen der diese Entwickeln möchte.
Wichtiger Hinweis!
Dieses Kapitel, über das man ganze Bücher schreiben kann, erhebt keine Anspruch auf Vollständigkeit noch müssen die hier getroffenen Aussagen fehlerfrei und rechtlich Binden sein. Die hier gezeigten Methoden dienen einzig und allein dazu sich mit den möglichen Sicherheitsproblemen zu beschäftigen, hier wird kein Code zum Hacken / Cracken von Website / Webanwendungen veröffentlicht. Sollte jemand doch das Kapitel in Erwartung dessen lesen, so ist diese Person hier am falschen Platz.
Beispiele für gecrackte Internetseiten gibt es haufenweise und in einer Mannigfaltigkeit das ich hier nur einige Beispiele nennen möchte, z.B. haben sich in letzter Zeit die Fälle gehäuft in denen Wordpress-Blogs gehackt wurden. Dieses ist bei Wordpress ein neues Problem, auch wenn dies mit jeder neuen Version zunehmen schwer wird. Nicht immer wird dabei der Content zerstört, es wird auch versucht dem User Schade-Software unterzujubeln oder versucht diesen versteckt auf weitere Seiten umzuleiten.
Eben so gibt es aber auch prominente Beispiele für gehackte TYPO3-Systeme, wobei hier meist auch ein nicht sicher Konfigurierter Webserver eine Rolle spielen kann.
Da wir uns hier aber mit PHP und nicht mit dem Webserver an sich beschäftigen, wollen wir schauen wie wir die von uns entwickelten Webanwendungen so sicher wie möglich machen können. Eins muss einem von vornherein klar sein, nicht jeder User wird die Software so nutzen wie wir das wollen. Daher muss man auch bei "Fehleingaben" gewährleisten das dadurch kein Schaden entstehen kann.
Ein Verständnis der Angriffstechniken ob einzeln oder kombiniert angewendet hilft uns dabei dies Schwachstellen so gering wie möglich zuhalten.
Dem Angreifer die Lust nehmen
Als Ziel sollte man sich setzen die größt mögliche Sicherheit erreichen zu wollen, ich weis das man gerade am Anfang vor unbekannten das bekannte im Code nicht mehr sieht - gerade wenn man von Anfang an auf Sicherheit hinarbeitet. Wer sich sagt "ich sehe erst einmal zu das das ganze Funktioniert", sollte danach unter gar keinen Umständen vergessen sich um die Sicherheit zukümmern!
Ganz einfach gesagt, man sollte die Eingaben und aber auch Ausgaben aus der Datenbank oder Datei möglichst häufig auf die Richtigkeit prüfen, gerade bei Nutzereingaben sollte mansich nicht nur auf die gefilterten Eingaben verlassen sondern dies auch vor dem Schreiben in die DB / Datei noch einmal prüfen.
Je mehr Sicherheit, desto schwerer wird ein Angriff und die Angriffsfläche wird kleiner - vielleicht hat man auch einfach das Glück und der Angreifer gibt auf wenn er schon wieder vor einer neue "Wand" steht. Die Zeit die man in die Sicherheit seiner Webanwendung investiert bekommt man später im Produktiveinsatz mehrfach zurück. - Alleine Dadurch das man statt wieder einmal die Anwendung zuflicken in der Sonne liegen kann. ;)
Schauen wir uns nun einzelne Methoden an, sollte ich hier wichtiges Vergessen haben schreibt mir eine E-Mail!