Zum Thema Sicherheit von PHP Scripts (mit besonderem Fokus auf SQL Injections) gab es vor kurzem ja schon einen Eintrag, jedoch möchte ich einige weitere Tipps/Verbesserungen vorstellen, die ziemlich einfach umzusetzen sind ohne gross an Performance einzubüssen.
LFI
Als erstes möchte ich kurz auf LFIs (local file includes/inclusions) eingehen. In der Praxis entsteht eine solche Lücke meist aus Leichtsinn, Unwissenheit oder aufgrund der Faulheit des Coders bei der Nutzung von include oder require (selbstverständlich auch bei include_once respektive require_once). Hier ein kurzes Beispiel eines verwundbaren Scripts:
Sobald der GET Parameter “page” gesetzt ist (http://…/index.php?page=user) wird die Datei includet. Da keinerlei Überprüfung des Parameters erfolgt kann ein Besucher mit bösen Absichten jegliche Datei includen die er will zum Beispiel so: “http://…/index.php?page=../../../../../../etc/passwd” – Auf diese Weise erhält er Zugang zu jeder Datei auf dem Server auf dem der HTTPDaemon läuft (auf Finessen wie CHROOT Jails etc. gehe ich hier nicht ein).
Auch eine Abfrage wie:
Wird nicht helfen, da die Möglichkeit ungewollte Files zu includen noch immer besteht.
Eine einfache Möglichkeit solche Lücken zu schliessen ist sogenanntes Whitelisting. Dabei erstellt man einen Array mit den Seiten und prüft dann ob der “page” Parameter darin enthalten ist:
So includet man einfach die “main.php” sobald der “page” Parameter nicht im Array ist und schliesst somit die LFI Lücke.
RFI
Eine ähnliche Attacke wie LFIs nur wird hier eine Datei von einem anderen Server geladen (zum Beispiel eine PHP Shell) und dann durch das Script ausgeführt. Auch hier hilft das oben vorgestellte Whitelisting um solchen Attacken vorzubeugen.
Fürs erste war es das nun auch schon, ich werde mich jedoch in Kürze mit einem weiteren Artikel, der noch weitere PHP Security Tipps beinhalten wird, melden, besucht den Blog einfach wieder oder haut ihn gleich in euren Feedreader rein.
So long
bl0b
Danke an bl0b fuer den Artikel, eventuell folgt demnaechst mehr von ihm 😉
Klingt gut, wieder was gelernt. 🙂
Dankeschön.
ändert mal das include im code 😉
Mit einem guten PHP-Framework wäre das nicht passiert…