PHP

Never trust user input – PHP Fehler Nr. 1

Thursday, February 5th, 2009 | PHP | 3 Comments

<?php
readfile(ROOT_DIR . "/" . $_GET["file"]);
?>

Wer kennt diese Zeilen nicht? Jeder der sich einmal mit PHP beschäftigt hat wird bei diesen Zeile schnell aufmerksam. Meistens findet man diese drei Zeilen in einer download.php, navigation.php oder image.php.

In der Website steht dann <a href=”/download.php?file=/files/antrag-02-2009.pdf”>Antrag Februar 2009</a> oder als Bild <img src=”/img.php?file=/images/thumbnails/01.jpg” />.

Doch der Programmier hat hier eine der wichtigsten Regeln nicht beachtet:

Never trust user input

Jede Benutzereingabe ist evil und muss überprüft werden. Wenn man solche Scripte in freie Wildbahn findet, kann man nur hoffen, dass der Programmierer lediglich ein Hobby-Projekt betreut(e).

Ein $Script-Kiddie würde diese Adresse etwas verändern und darauf hoffen, dass ein Amateur am Werk war:

/download.php?file=index.php

Würde bei unserem Beispiel die index.php als Quellcode ausliefern. Prinzipiell lässt sich damit jede Datei aufrufen, auf die PHP zugreifen kann. Bei einem schlecht konfigurierten Server ist so unter Umständen schnell der ganze Server betroffen. Letzters traf vor einigen Jahren auch den Sat. 1 “Computer- und Internetexperten” Peter Huth; nach einem Bericht auf Heise wurde der Server kompromittiert.

Noch schlimmer wäre es übrigens, wenn man readfile() durch include() ersetzt. Damit würde eine PHP-Datei von einem fremden Server geladen und ausgeführt. Damit könnte man seine eigene Scripte auf dem Server ausführen! Bei einem guten Hoster ist man davor jedoch geschützt, bzw. man setzt selbst ini_set(“allow_url_include”, false) in seiner Anwendung.

Bei Google findet man mit einfachen Abfragen direkt etliche Kandidaten mit dieser Sicherheitslücke Einladung.

Zum Schluß hab ich noch einen Link zu einem kurzen Tutorial rausgesucht.

Tags: , ,

PHP-Fehler automatisch als Tweet bei Twitter

Tuesday, August 26th, 2008 | frisch aus dem Netz | Comments Off on PHP-Fehler automatisch als Tweet bei Twitter

Von Twitter man man halten was man möchte. Einen Hype haben die 140 Zeichen langen Tweets auf jeden Fall ausgelöst.

Johannes Schlüter ist PHP-Core Entwickler und arbeitet zur Zeit darum, dass irgendwann mal die Version 5.3 von PHP veröffentlich wird – kurz, grob zusammengefasst.

Er selbst hält nicht wirklich viel von Twitter:

now there’s this twitter thing, until recently I didn’t understand it. Whenever I visit the site I see mostly pointless (imo) stuff like “preparing my pizza”, “eating my pizza”, “done with my pizza”.

Trotzdem hat er sich mit Twitter beschäftigt und hat eine PHP-Erweiterung geschrieben, die PHP-Fehler automatisch als Tweet auf Twitter einträgt. Das Ganze ist in C geschrieben und muss für die jeweilige PHP-Version kompiliert werden; das hat den Vorteil, dass die PHP-Anwendung nicht angepasst werden muss. Man könnte dieses Error-Reporting auch in purem PHP machen.

Durch die SMS-Benachrichtigung von Twitter hätte man ein tolles Reportingsystem. Allzu ernst sollte man das jedoch nicht nehmen: Fehlermeldungen sollte eigentlich nicht öffentlich zugänglich sein, schon gar nicht mit einem Archiv. Mal ganz davon abgesehen, das Twitter nicht die schnellste und stabilste Website ist.

Tags: , ,

Umfrage-Tool und IP-Sperre

Sunday, March 2nd, 2008 | PHP | 2 Comments

Ich hab in der letzten Woche ein kleines Umfrage-Tool geschrieben. Damit jemand nur einmal abstimmen kann, setze ich neben einem Cookie auch noch auf eine IP-Sperre.

Generell ist eine IP-Sperre aber problematisch, viele Firmen haben einen Internetanschluß mit mehreren Users. Der Router macht NAT und die x User gehen über eine öffentliche IP ins Internet. Aus so einem Netz könnte man natürlich auch nur einmal abstimmen. Auf der anderen Seite gibt es Internetprovider, die ihre User über Zwangsproxies leiten, damit kann es sein, dass zwei Requests von einem User, die wenigen Sekunden auseinander liegen, von verschiedenen IPs kommen. AOL setzt oder setzte auf einen Zwangsproxy.

Bei dem Umfrage-Tool nutze ich veschiedene Faktoren, damit ich eine doppelte Abstimmung verhindern kann. Wie schon geschrieben ist ein Faktor die IP-Adresse, für das Testen der IP-Sperre habe ich ein kleines Script in PHP5 geschrieben, das automatisch Verbindungen über einen öffentliche Proxy-Server herstellt.

› Continue reading

Tags: , , , ,

Apache 1.3 vs. 2.2 (mit mod_php5)

Saturday, January 12th, 2008 | Administration, Linux | Comments Off on Apache 1.3 vs. 2.2 (mit mod_php5)

Vor kurzem sind wir in ein neues Rechenzentrum umgezogen, bei dem Umzug habe ich direkt ein Upgrade durchgeführt. Bei einem Webserver von RHEL 3 auf Centos 5, von Apache 1.3 auf 2.2 und PHP 4 auf 5. War soweit ziemlich unproblematisch, zwar mussten einige PHP-Dateien angepasst werden, aber das war mit ein paar Scripten schnell erledigt.

› Continue reading

Tags: , ,