PHP ist eine der am weitesten verbreiteten Programmiersprachen für Webanwendungen. Damit Webserver sicher betrieben werden können, ist ein gezieltes Hardening der PHP-Umgebung essenziell. Dies betrifft insbesondere die Einschränkung von gefährlichen Funktionen, die Beschränkung von Dateisystemzugriffen mittels open_basedir sowie die Isolation von PHP-FPM-Pools. In diesem Artikel erfahren Sie praxisnah, wie diese Sicherheitsmechanismen implementiert und optimiert werden können, um Angriffsflächen zu minimieren.
Disable Functions: Gefährliche PHP-Funktionen sperren
Viele PHP-Funktionen können von Angreifern missbraucht werden, z.B. zur Ausführung von Shell-Befehlen oder zur Manipulation des Dateisystems. Die Direktive disable_functions in php.ini ermöglicht es, diese Funktionen zu sperren.
Typische Funktionen, die gesperrt werden sollten
exec(),shell_exec(),system(),passthru()proc_open(),popen()eval()undassert()file_put_contents()oderunlink()nur dann, wenn keine Schreibrechte notwendig sind
Beispielkonfiguration
disable_functions = exec,passthru,shell_exec,system,proc_open,popen,eval,assert
Hinweis: Funktionen wie file_get_contents() oder fopen() sollten nur eingeschränkt werden, wenn die Anwendung diese nicht benötigt.
Open_basedir: Zugriff auf das Dateisystem einschränken
Mit open_basedir können PHP-Skripte nur auf bestimmte Verzeichnisse zugreifen. Dies verhindert, dass kompromittierte Skripte das gesamte Dateisystem auslesen oder manipulieren.
Syntax und Beispiel
open_basedir = /var/www/html:/tmp
Erklärung:
- /var/www/html: Hauptverzeichnis der Webanwendung
- /tmp: temporäre Dateien, die für Uploads oder Caching benötigt werden
Tipps für sichere Konfiguration
- Jede Website sollte ihr eigenes
open_basedir-Verzeichnis haben - Kein Zugriff auf Systemverzeichnisse wie
/etcoder/var/log - Verwenden Sie absolute Pfade und trennen Sie mehrere Verzeichnisse mit Doppelpunkten (Linux) bzw. Semikolon (Windows)
PHP-FPM Pool Isolation
PHP-FPM ermöglicht es, mehrere Pools zu betreiben, die unabhängig voneinander laufen. Dies bietet Vorteile für Performance und Sicherheit.
Vorteile der Pool-Isolation
- Jede Website läuft unter einem eigenen Benutzer, Reduzierung von Privilegien
- Memory-Limits und max_children können pro Pool gesetzt werden
- Fehler oder Sicherheitslücken in einem Pool beeinträchtigen nicht die anderen Pools
Beispiel einer Pool-Konfiguration
[www-site1]
user = site1
group = site1
listen = /run/php/php8.1-site1.sock
pm = dynamic
pm.max_children = 10
pm.start_servers = 2
pm.min_spare_servers = 1
pm.max_spare_servers = 3
php_admin_value[open_basedir] = /var/www/site1:/tmp
php_admin_value[disable_functions] = exec,passthru,shell_exec,system,proc_open,popen,eval,assert
[www-site2]
user = site2
group = site2
listen = /run/php/php8.1-site2.sock
pm = dynamic
pm.max_children = 15
pm.start_servers = 3
pm.min_spare_servers = 2
pm.max_spare_servers = 5
php_admin_value[open_basedir] = /var/www/site2:/tmp
php_admin_value[disable_functions] = exec,passthru,shell_exec,system,proc_open,popen,eval,assert
Weitere Hardening-Maßnahmen
Memory Limits und Execution Time
memory_limitbegrenzen, z.B.128Mmax_execution_timeauf ein Minimum setzen, z.B. 30 Sekunden- Verhindert Denial-of-Service durch lange oder rekursive Skripte
Error Reporting und Logging
- Keine sensiblen Informationen in
display_errorsausgeben - Fehler in sichere Log-Dateien schreiben
display_errors = Off
log_errors = On
error_log = /var/log/php-fpm-site1.log
Session Hardening
- Secure- und HttpOnly-Flags für Cookies setzen
- Sessions in Redis oder Memcached isolieren, nicht auf Dateisystem
session.cookie_secure = 1
session.cookie_httponly = 1
session.save_handler = redis
session.save_path = "tcp://127.0.0.1:6379"
Monitoring und Security Checks
Regelmäßige Überwachung ist essenziell, um Konfigurationsabweichungen oder Sicherheitsprobleme früh zu erkennen.
Tools und Prüfungen
php -ifür aktuelle Konfiguration prüfen- Log-Dateien auf Fehler oder ungewöhnliche Zugriffe analysieren
- Automatisierte Security-Scanner wie
PHP Security Auditeinsetzen
Zusammenfassung
Ein professionelles PHP-Hardening kombiniert das Sperren gefährlicher Funktionen, die Beschränkung des Dateisystemzugriffs über open_basedir und die Isolation von PHP-FPM-Pools. Ergänzende Maßnahmen wie Memory-Limits, sichere Error-Logs und Session-Hardening erhöhen die Sicherheit der Webapplikation erheblich. Durch konsequentes Monitoring und regelmäßige Überprüfungen bleibt die PHP-Umgebung auch unter hoher Last stabil und sicher.
Konfiguriere Cisco Router & Switches und liefere ein Packet-Tracer-Lab/GNS3
Ich biete professionelle Unterstützung im Bereich Netzwerkkonfiguration und Network Automation für private Anforderungen, Studienprojekte, Lernlabore, kleine Unternehmen sowie technische Projekte. Ich unterstütze Sie bei der Konfiguration von Routern und Switches, der Erstellung praxisnaher Topologien in Cisco Packet Tracer, dem Aufbau und Troubleshooting von GNS3- und EVE-NG-Labs sowie bei der Automatisierung von Netzwerkaufgaben mit Netmiko, Paramiko, NAPALM und Ansible. Kontaktieren Sie mich jetzt – klicken Sie hier.
Meine Leistungen umfassen:
-
Professionelle Konfiguration von Routern und Switches
-
Einrichtung von VLANs, Trunks, Routing, DHCP, NAT, ACLs und weiteren Netzwerkfunktionen
-
Erstellung von Topologien und Simulationen in Cisco Packet Tracer
-
Aufbau, Analyse und Fehlerbehebung von Netzwerk-Labs in GNS3 und EVE-NG
-
Automatisierung von Netzwerkkonfigurationen mit Python, Netmiko, Paramiko, NAPALM und Ansible
-
Erstellung von Skripten für wiederkehrende Netzwerkaufgaben
-
Dokumentation der Konfigurationen und Bereitstellung nachvollziehbarer Lösungswege
-
Konfigurations-Backups, Optimierung bestehender Setups und technisches Troubleshooting
Benötigen Sie Unterstützung bei Ihrem Netzwerkprojekt, Ihrer Simulation oder Ihrer Network-Automation-Lösung? Kontaktieren Sie mich jetzt – klicken Sie hier.

