Skript-Sicherheit mittels PHP.INI erhöhen

Nachem wir uns vor wenigen Wochen hier im Blog dem Mysterium der PHP.INI“ gewidmet 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.

End of article

Dietmar

Über den Autor

Dietmar

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.

5 Kommentare

Die von Ihnen hier erhobenen Daten werden von der domainfactory GmbH zur Veröffentlichung Ihres Beitrags in diesem Blog verarbeitet. Weitere Informationen entnehmen Sie bitte folgendem Link: www.df.eu/datenschutz


  • Florian
    Florian - 7. November 2012 um 13:11 Uhr

    Vielen Dank für die Hinweise, expose_php auf “Off” zu setzen ist auf jeden Fall empfehlenswert!

    Wie sieht es mit der (Apache) ServerSignature Off und den ServerTokens aus, um die Apache Version zu verstecken? Auf die httpd.conf und apache.conf hat man ja verständlicherweise keinen Zugriff. Habe aber gelesen, dass die Einstellung je nach Setup auch via .htaccess möglich wäre?

  • Dietmar Leher
    Dietmar Leher - 7. November 2012 um 14:26 Uhr

    Hallo Florian,
    die beiden genannten Einstellungen sind zwar per .htaccess möglich, allerdings nur mit einem eigenen Server (Managed- oder ResellerDedicated Server) und können dort auch generell für alle Domains über unsere Technikabteilung fest gesetzt werden. Bei SharedHosting werden Sie beim Setzen des ServerTokens in der .htaccess einen Fehler 500 auslösen.
    Wir gehen darauf in einem der nächsten Beiträge zum Thema Sicherheit auch nocheinmal ein.