Tipps & Tutorials

Skript-Sicherheit mittels PHP.INI erhöhen


Veröffentlicht am 07.11.2012 von Dietmar Leher

Nachem wir uns vor wenigen Wochen hier im Blog dem "Mysterium der PHP.INIgewidmet hatten, möchten wir nachfolgend auf einige der möglichen Einstellungen eingehen, die zum Schutz Ihrer Webpräsenz beitragen (können).

Für die php.ini-Datei Ihrer Domain(s) sind beispielsweise folgende Optionen und Werte je nach Anwendungszweck sinnvoll:

allow_url_fopen = "Off" Deaktiviert die Möglichkeit Dateien einer anderen Domain zu öffnen
allow_url_include = "Off" Deaktiviert die Möglichkeit Dateien einzubinden
expose_php = "Off" Gibt kein PHP-Logo und kein HTTP Header X-Powered-By aus
display_errors = "Off" Zeigt keine Fehlermeldungen auf der Webseite an
register_globals = "Off" Deaktiviert die globale Verfügbarkeit von GET und POST
safe_mode = "On" Aktiviert u.a. Prüfungen von Dateiberechtigungen (User identifier)
safe_mode_gid = "On" (Aktiviert u.a. Prüfungen von Gruppenberechtigungen (Group identifier))

 

Alle genannten Werte können auch über "0" für "Off" deaktiviert oder "1" für "On" aktiviert werden.

Bitte beachten Sie, dass manche Software die eine oder andere Option benötigt (z.B. allow_url_fopen [Joomla-Updatesuche]). Bitte schalten Sie diese in einem solchen Fall nicht ab.
Im Falle von Joomla kann ein Update beispielsweise auch mit geringfügigem Mehraufwand über das manuelle Laden der Dateien und Entpacken auf dem Webserver erfolgen.

Wurde die Anzeige von Fehlermeldungen (display_errors) deaktiviert, ist es im Regelfall sinnvoll, diese dann in eine Datei schreiben zu lassen. Dazu nutzen Sie in der php.ini-Datei die Option log_errors = ON und geben den Pfad zur Datei über error_log = /pfad/zum/log an.

Die Optionen zu den register_globals und safe_mode sind seit PHP 5.3.0 veraltet und finden keine Anwendung mehr, diese sind in den neuen Versionen von PHP größer 5.4.0 auch komplett entfallen.

 

Shell-Befehle deaktivieren

Ebenfalls kann es bei Bedarf Sinn machen, die Ausführung von Befehlen auf dem Webserver per Skript zu unterbinden, nachfolgend ein möglicher Eintrag für die php.ini-Datei:

disable_functions = "show_source, shell_exec, passthru, exec, phpinfo, system, popen, proc_open, ini_restore, proc_nice"

Diese Liste kann jederzeit auch erweitert werden und wer viel Wert auf Sicherheit legt, kann dort auch Dinge wie beispielsweise die Anzeige des noch zur Verfügung stehenden Speicherplatzes, der aktuellen User-ID u.ä. deaktivieren: escapeshellarg, escapeshellcmd, diskfreespace, disk_free_space, getmyuid, pfsockopen, link, set_time_limit

Sie finden eine Erklärung der jeweiligen Funktionen in der Referenz von PHP unter http://de3.php.net/manual/de/funcref.php
Dort existiert auch eine Suchfunktion.

Auch hier gilt: Es kann Anwendungen wie ein CMS, Blog, eine Bildergalerie o.ä. die eine der genannten Funktionen in Skripten einsetzt und zwingend erfordert. Die Deaktivierung von Optionen kann daher zu Fehlverhalten führen! Wir empfehlen, die Optionen nicht zu setzen, wenn Ihnen die Funktion unklar ist.

 

Sichere PHP-Version wählen

Aus diesem Grund werden bei uns nur drei der eingangs genannten Einstellungen standardmäßig gesetzt, wenn Sie für Ihre Domain im Kundenmenü die "sicheren PHP-Einstellungen" ausgewählt haben:

allow_url_fopen = "Off"
allow_url_include = "Off'"
register_globals = "Off"

Wir hoffen, Ihnen mit diesen Grundlagen einen kurzen Einblick in das komplexe Thema 'Sicherheit' gegeben zu haben. Eine allgemein gültige Empfehlung für eine PHP.INI, die alle Anwendungszwecke abdeckt, kann es nicht geben und die in diesem Artikel genannten Punkte sind sicher nur eine Auswahl der möglichen Optionen.

Haben Sie darüber hinaus noch Tipps und Anregungen zu Optionen der PHP.INI oder einen Erfahrungsbericht, so freuen wir uns über Kommentare.

Der Autor:


Dietmar ist seit 2005 bei domainFACTORY in wechselnden Aufgabenbereichen tätig. Seit 2013 unterstützt er als "Spezialist Qualitätssicherung Web" die Kollegen in der Entwicklungsabteilung bei allen Themen rund um Quality Assurance / Testing. 
Dabei kommt ihm die jahrelange Erfahrung im direkten und indirekten Kundensupport und der Begleitung bei der Einführung unseres ResellerProfessional-Systems zu Gute. Auch für viele Kollegen ist er bei Fragen dazu oder sehr alten Tarif-Konstellationen noch immer gerne eine Anlaufstelle.