PHP Security: disable_functions, open_basedir und sichere Defaults

Die PHP-Sicherheit ist ein zentraler Aspekt für stabile und geschützte Webserver. Funktionen wie disable_functions und open_basedir erlauben es, riskante PHP-Funktionen zu deaktivieren und den Zugriff auf bestimmte Verzeichnisse einzuschränken. Zusätzlich sollten sichere Default-Einstellungen in php.ini gesetzt werden, um Angriffsflächen zu minimieren. In diesem Leitfaden erfahren Einsteiger, IT-Studierende und Junior Network Engineers, wie PHP sicher konfiguriert wird.

disable_functions: gefährliche Funktionen deaktivieren

PHP bietet mächtige Funktionen, die in unkontrollierten Umgebungen ein Sicherheitsrisiko darstellen. Mit disable_functions können diese Funktionen global deaktiviert werden.

Empfohlene Funktionen zum Deaktivieren

  • exec, shell_exec, system, passthru – Ausführung von Shell-Befehlen
  • popen, proc_open – Prozesssteuerung
  • pcntl_exec – Prozesskontrolle
  • eval – dynamische Codeausführung
  • create_function – dynamische Funktionsdefinition
; /etc/php/7.4/fpm/php.ini
disable_functions = exec,shell_exec,system,passthru,popen,proc_open,pcntl_exec,eval,create_function

open_basedir: Verzeichniszugriffe einschränken

Mit open_basedir kann der PHP-Prozess auf bestimmte Verzeichnisse beschränkt werden. Damit wird verhindert, dass Skripte auf sensible Systemverzeichnisse zugreifen.

Beispiel: Webroot einschränken

; /etc/php/7.4/fpm/pool.d/www.conf
php_admin_value[open_basedir] = /var/www/meineseite:/tmp

Alle PHP-Skripte können nur auf /var/www/meineseite und temporäre Dateien in /tmp zugreifen.

Sichere Defaults in php.ini

Bestimmte PHP-Einstellungen tragen wesentlich zur Sicherheit bei.

Empfohlene Einstellungen

  • expose_php = Off – PHP-Versionsinformationen nicht offenlegen
  • display_errors = Off – Fehlermeldungen nicht an Besucher ausgeben
  • log_errors = On – Fehler intern protokollieren
  • session.cookie_httponly = On – Session-Cookies vor JavaScript schützen
  • session.cookie_secure = On – Nur über HTTPS übertragen
  • allow_url_fopen = Off – Remote-Dateien nicht automatisch öffnen
  • allow_url_include = Off – Remote-Includes verhindern
; /etc/php/7.4/fpm/php.ini
expose_php = Off
display_errors = Off
log_errors = On
session.cookie_httponly = On
session.cookie_secure = On
allow_url_fopen = Off
allow_url_include = Off

PHP-FPM Pool Isolation

Jeder Webanwendung sollte ein eigener PHP-FPM Pool zugeordnet werden, um Benutzerrechte und Ressourcen zu isolieren.

[meineseite]
user = www-data
group = www-data
listen = /run/php/php7.4-fpm-meineseite.sock
php_admin_value[open_basedir] = /var/www/meineseite:/tmp
php_admin_value[disable_functions] = exec,shell_exec,system,passthru,popen,proc_open,pcntl_exec,eval,create_function

Logs überwachen

Fehler- und Access-Logs helfen, Sicherheitsprobleme frühzeitig zu erkennen.

tail -f /var/log/php7.4-fpm.log
tail -f /var/log/nginx/meineseite_error.log

Netzwerk- und Subnetzplanung

IP-Restriktionen für Admin-Bereiche oder FPM Pools benötigen saubere Subnetzplanung.

IPv4 Subnetz

<math>
Server-IP = 192.168.190.10/24
Subnetzadresse = 192.168.190.10 & 255.255.255.0 = 192.168.190.0
Broadcastadresse = 192.168.190.0 | ~255.255.255.0 = 192.168.190.255
</math>

IPv6 Subnetz

<math>
Server-IP = 2001:db8:abcd:190::10/64
Subnetzadresse = 2001:db8:abcd:190:: & ffff:ffff:ffff:ffff:: = 2001:db8:abcd:190::0
Broadcastadresse = 2001:db8:abcd:190:ffff:ffff:ffff:ffff
</math>

Best Practices

  • Riskante Funktionen global mit disable_functions sperren
  • open_basedir pro Pool oder Website setzen
  • Display Errors deaktivieren, Logging aktivieren
  • Session-Cookies sicher mit httponly und secure setzen
  • Remote File Include Optionen deaktivieren
  • Separate PHP-FPM Pools für unterschiedliche Anwendungen nutzen
  • Regelmäßige Updates der PHP-Versionen und Module
  • Fehler- und Access-Logs regelmäßig prüfen
  • Backups der Konfigurationen erstellen
  • Netzwerkrestriktionen für Adminbereiche planen

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.

Related Articles