3. Juli 2012 | 1 Comment Willkommen zu einem neuen Eintrag – Eine Frage vorab: Kennt einer von euch die PHP Konfiguration „expose_php“? Solltet Ihr über einen eigenen Server (also keinen Shared-Host o.Ä.) verfügen würde ich euch Raten diese Konfiguration auszuschalten – Vor allem wenn eure PHP Version nicht auf einem aktuellen Stand ist und ggf. noch bekannte Sicherheitslücken beinhaltet. Durch expose_php ist es nämlich jedem beliebigen Besucher eurer Webseite/ -Applikation möglich genau zu sehen welche PHP Version und welche Extensions bei euch aktiv sind. Was? Wie genau ist das möglich? Es gibt ein paar fest definierte GET Parameter, die PHP dazu veranlassen die „phpcredits“ oder das PHP-Logo auszugeben. Diese lauten folgendermaßen: http://web-developer-blog.com/?=PHPE9568F36-D428-11d2-A769-00AA001ACF42 http://web-developer-blog.com/?=PHPE9568F34-D428-11d2-A769-00AA001ACF42 http://web-developer-blog.com/?=PHPB8B5F2A0-3C92-11d3-A3A9-4C7B08C10000 Der erste Link wird euch ein Easter-Egg zeigen – Ihr seht ein verändertes PHP-Logo das, je nach PHP Version, sein aussehen verändert (eine kleine Auflistung findet ihr auf 0php.com). Der zweite wird das „normale“ PHP Logo darstellen Beim letzten Link werden die PHP-Credits ausgegeben (Hier werden entsprechend eure aktiven Extensions aufgelistet) Bei jedem der Requests werden einige Header mitgesendet – Hier der Header des PHP Logos meiner Maschine: Content-Type image/gif Date Sun, 01 Jul 2012 12:58:29 GMT Server Apache/1.3.41 (Unix) PHP/5.2.17 X-Powered-By PHP/5.2.17 Dieses „Feature“ ist also ein indirektes Sicherheitsrisiko. Der Web-Developer-Blog läuft auf einem Shared-Host, weshalb ich es leider nicht ausschalten kann 🙁 Was kann ich dagegen tun? Aktiv etwas dagegen tun kann nur euer Admin – Bei Shared-Hostern wird das allerdings schwierig (hier kann ggf. nicht einfach an der php.ini herumgeschraubt werden). An sich braucht ihr nur diese Zeile in eurer php.ini finden: expose_php = On Oder auch expose_php = 1 Hier braucht ihr nur „On“ gegen „Off“ bzw. „1“ gegen „0“ tauschen. Schon sollten die GET-Parameter nicht mehr funktionieren. Lässt sich außerhalb der php.ini was tun? Leider ist das nicht möglich. Diese Einstellung lässt sich nur direkt in der php.ini setzen – Also nicht im Quelltext via ini_set. Auch das abfangen des GET-Parameters ist nicht möglich. Mit diesem kurzen Eintrag verabschiede ich mich auch schon für Heute und möchte einen angenehmen Start in den Juli wünschen!
Sollte man wenigstens mod_rewrite zur Verfügung haben hilft auch ein: RewriteCond %{QUERY_STRING} \=PHP[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12} [NC] RewriteRule ^(.*)$ – [R=403,L]; Und schon sind die neugierigen ausgesperrt. Antworten