Bereits das eine oder andere Mal habe ich in Artikeln auf redirect301.de auf eine phpinfo-Datei hingewiesen. Da vielleicht nicht jeder sofort damit etwas anfangen kann oder eine auf den Webserver geladene info.php dort für alle Zeit ungeschützt liegen lässt, möchte kurz die PHP-Funktion phpinfo() vorstellen und ein paar Sicherheitshinweise mit auf den Weg geben.
Mit phpinfo() lassen sich eine ganze Reihe Informationen über die momentane PHP-Konfiguration anzeigen. Die Ausgabe erfolgt im Browser in einer übersichtlichen Tabelle. Bei Bedarf ließen sich auch nur Teile der Daten ausgeben, deren Konstanten mit einem logischem or kombinierbar sind. Auf php.net sind die einzelnen Parameter aufgelistet.

<?php phpinfo(INFO_LICENSE | INFO_VARIABLES); ?>

Erstellen und Verwenden einer phpinfo-Datei

Erstellt eine kleine PHP-Datei mit dem Editor eurer Wahl, es reicht auch der Texteditor von Windows, und schreibt die folgende Zeile PHP-Code:

<?php phpinfo(); ?>

Speichert die Datei unter einem beliebigen Namen (z.B. isn6jqn) mit der Endung .php ab und ladet sie auf euren Webserver. Nun könnt ihr diese im Browser aufrufen – in meinem Fall also unter www.phpinfo.redirect301.de/isn6jqn.php – und bekommt reichlich Informationen zu:

  • PHP-Version
  • PHP-Konfiguration
  • PHP-Kern
  • Apache-Version und der verwendeten Module
  • PHP-Umgebungsvariablen
  • HTTP Header
  • MySQL
  • und vielen weiteren mehr
HTTP Headers Information - phpinfo

HTTP Headers Information mit phpinfo()

Gebrauchen kann man diese Informationen immer dann, wenn es irgendwo klemmt oder man sich im Vorfeld über die Bedingungen informieren möchte. So werden zum Beispiel im Abschnitt apache2handler die geladenen Apache-Module angezeigt. Wird hier mod_auth_digest nicht erwähnt, dann ließe sich auch keine verschlüsselte Server-Authentifizierung einrichten und man muss nicht lange nach dem Grund suchen, warum htdigest nicht funktioniert. Genauso verhält es sich bei Problemen mit PHP-Scripts.

Sicherer Umgang mit den Server-Informationen

Oft stößt man auf info.php oder phpinfo.php usw., was ich nicht für die sicherste Namenswahl halte. Auch wenn diese PHP-Datei nur „mal kurz“ auf dem Server bleiben soll, ist etwas mehr Kreativität gefragt. Die Ausgabe der Funktion verrät eine ganze Menge über die Serverkonfiguration und das geht niemanden etwas an. Wenn ich wirklich „nur mal kurz“ nachschauen möchte, dann bekommt die Datei einen Namen wie den bereits erwähnten isn6jqn.php (also irgendwas kryptisches eben, was sich nicht erraten lässt). Sicherer ist es natürlich, diese Datei vor Zugriffen von nicht autorisierten Personen gänzlich zu vermeiden. Per IP- oder Passwort-Schutz ist man gewiss auf der sicheren Seite.

Ein potentieller Angreifer, ein böswilliger Hacker, freut sich mit Sicherheit über die vielen, bereitwillig preisgegebenen Informationen, die per phpinfo() ausgegeben werden. Er sieht sofort welche Module in welchen Versionen auf dem Server laufen, unter welchen Serverpfaden was wie erreichbar ist und hat dabei noch einen mächtigen Helfer. Google! Sucht bei Tante G einfach mal nach typischen Inhalten aus der phpinfo-Anzeige. Der Lizenztext zum Beispiel am Ende der Ausgabe. Und schaut mal, wer da nicht alles seine kompletten Serverumgebungen der Netzgemeinde sowie den Internet-Bösewichten zur Verfügung stellt. Ein Hacker braucht also nur bei Google nach einem angreifbaren Modul inklusive Versionsnummer zu suchen und bekommt so eine schöne Übersicht neuer Angriffsziele.