PHP-Sicherheitseinstellungen für die Produktivumgebung

Doğan Uçar
web server security
Webserver Sicherheit. Fotos von Bing Image Creator

In der modernen Welt der Online- und Cloud-Angebote ist neben den endlos erscheinenden Angeboten leider auch die Schattenseite nicht außer Acht zu lassen. Anzunehmen, dass der zur Verfügung gestellte Dienst ausschließlich mit guten Absichten genutzt wird ist leider fatal. In Wahrheit muss genau das Gegenteil angenommen werden: Wenn Ihr System eine Schwachstelle hat, müssen Sie davon ausgehen, dass sie ausgenutzt wird. Daher ist neben einer sicherheitsgetriebenen Software-Entwicklung auch Monitoring und Prävention unumgänglich.

Der nachfolgende kurze Beitrag soll drei Kernpunkte einer sicheren Konfiguration von PHP basierten Anwendungen bieten. Die Liste ist ausdrücklich nicht als vollständig zu erachten und dient daher wenn überhaupt nur als guter Einstieg.

Suchen Sie Wege, Ihren Source Code sicherer zu gestalten, wissen aber nicht, wo Sie anfangen sollen? Wollen Sie Ihre Infrastruktur einem Audit unterziehen oder suchen ganz allgemein Beratung und Umsetzung? Dann kontaktieren Sie uns für ein unverbindliches Kennenlerngespräch über unser Kontaktformular! Wir freuen uns darauf.

Deaktivieren Sie gefährliche PHP Funktionen

Während die nachfolgenden Methoden an sich keine Sicherheitsprobleme darstellen, sollten Sie dennoch die Verwendung vermeiden. Diese Funktionen übergeben Befehle von der Ebene der Programmiersprache auf die des Betriebssystems. Das Betriebssystem ist in aller Regel viel mächtiger und kann unerwünschtes, fatales Verhalten darlegen, wenn Benutzereingaben nicht ordentlich validiert werden — was nicht immer trivial ist. Ein Beispiel für sogenannte Shell-Injection Attacken haben wir hier thematisiert.

  • exec: ermöglicht die Ausführung beliebiger Befehle, was von Angreifern ausgenutzt werden kann, um unbefugten Zugriff oder Kontrolle zu erlangen.
  • passhtru: gibt den Befehl direkt an die Shell weiter, was ein Sicherheitsrisiko darstellt, wenn die Benutzereingabe nicht ordnungsgemäß bereinigt wird.
  • shell_exec: ermöglicht die Ausführung von Shell-Befehlen, die für die Ausführung von Remote-Code ausgenutzt werden können und die Sicherheit des Servers gefährden.
  • system: führt ein externes Programm aus und zeigt die Ausgabe an, was möglicherweise sensible Informationen preisgibt oder die Ausführung von nicht autorisiertem Code ermöglicht.
  • proc_open: ermöglicht die Ausführung externer Prozesse, was zu Sicherheitslücken im Server führen kann, wenn die Benutzereingaben nicht korrekt bereinigt werden.
  • popen: öffnet einen Prozessdateizeiger, der Angreifern die Ausführung von Befehlen und die Gefährdung der Serversicherheit ermöglicht.
  • parse_ini_file: kann sensible Konfigurationsdetails preisgeben – wenn ein Angreifer den Dateipfad manipulieren kann, wird dies aller Wahrscheinlichkeit nach zu Sicherheitsverletzungen führen.
  • show_source/highlight_file: zeigt den Quellcode einer Datei and und gibt damit möglicherweise sensible Informationen oder geistiges Eigentum preis.
  • eval: wertet eine Zeichenkette als PHP-Code aus, was zu Code-Injektion und Sicherheitslücken führen kann, wenn die Benutzereingaben nicht ordnungsgemäß überprüft werden.
  • create_function: erstellt eine anonyme Funktion aus einer Zeichenkette, die ein Risiko für Code-Injection-Angriffe darstellt, wenn die Benutzereingabe nicht sorgfältig bereinigt wird.

Statische Sicherheitsrelevante Konfigurationseinstellungen

Die php.ini-Datei bietet eine Reihe von Konfigurationsmöglichkeiten. Einige sind abhängig wie PHP kompiliert wurde, andere sind immer enthalten. In jedem Falle sollten Sie also einen Blick in die offizielle PHP Dokumentation zu der php.ini werfen.
Nachfolgend möchten wir einige wichtige Einstellungen vorstellen, die Sie unbedingt setzen sollten, um Ihren produktiv eingesetzten Server abzuhärten:

  • display_errors: „Off“, um zu verhindern, dass den Benutzern Fehlermeldungen angezeigt werden, die sensible Informationen oder Systempfade offenlegen könnten.
  • expose_php: „Off“ – verhindert, dass die PHP-Versionsinformationen in HTTP-Antwort-Headern angezeigt wird. Angreifer können bekannte Sicherheitslücken in spezifischen Versionen ausnutzen.
  • allow_url_fopen/allow_url_include: unbedingt auf „Off“ setzen, um Sicherheitslücken in Bezug auf Remote File Inclusion (RFI) und Remote Code Execution (RCE) zu verhindern.
  • session.cookie_secure: „On“ – stellt sicher, dass Cookies nur über HTTPS-Verbindungen gesendet werden.
  • session.cookie_httponly: „On“ – verhindert dass clientseitige Skripte (z.B. JavaScript) auf Cookies zugreifen. Dadurch wird das Risiko von Cross-Site-Scripting (XSS)-Angriffen zu verringert.
  • session.use_strict_mode: „On“ aktiviert striktes Session Management und verhindert dadurch Session Fixation Attacken.
  • session.use_only_cookies: Setzen Sie diese Option auf „Ein“, um sicherzustellen, dass Session-IDs nur in Cookies gespeichert werden (und nicht etwa in der URL).

Abhängige Sicherheitsrelevante Konfigurationseinstellungen

Die nachfolgenden Optionen lassen sich ebenfalls in der php.ini finden. Ihre Werte sind allerdings abhängig von Ihrer Anwendung bzw. Anforderungen. Bewerten Sie kritisch die Funktionsweise der Optionen und setzen Sie realistische Werte. Allgemein gilt: je weniger desto besser und ganz abgeschaltet ist am besten!

  • file_uploads: „Off“ – verhindert unautorisierte Datei-Uploads.
  • upload_max_filesize/post_max_size: Begrenzen Sie die maximale Datei- und POST-Datengröße, um Angriffe auf die Ressourcenerschöpfung zu verhindern.
  • max_execution_time/max_input_time: Begrenzt die Skriptausführungs- und Eingabeverarbeitungszeiten, um das Risiko von Denial-of-Service-Angriffen (DoS) zu verringern.
  • memory_limit: setzt ein angemessenes Limit, um eine übermäßige Speichernutzung zu verhindern und DoS-Angriffe abzuschwächen.
  • session.cookie_samesite: Konfigurieren Sie auf „Strict“ oder „Lax“, um sich gegen Cross-Site Request Forgery (CSRF)-Angriffe zu schützen, indem Sie kontrollieren, wann Cookies gesendet werden.
Ucar Solutions ist auf YouTube!
Dieser Blogpost ist ebenfalls in Videoform verfügbar.

Aus Datenschutzgründen wurde das Video als Screenshot und nicht wie üblich als YouTube-Embed eingebettet. Wenn Sie das Video schauen möchten klicken Sie einfach auf das Screenshot.
PHP Sicherheitseinstellungen für die Produktivumgebung
PHP Sicherheitseinstellungen für die Produktivumgebung

IT-Sicherheit mit Ucar Solutions

Wir bieten Ihnen umfassende System- und Source-Code-Prüfungen, um Ihre Datenbanken, Server und Anwendungen vor zahlreichen potenziellen Sicherheitsgefahren und anderen sicherheitsrelevanten Aspekten zu schützen. Mit Hilfe von automatisierten und manuellen Verfahren unterstützen wir Sie bei der Sicherung Ihrer sensiblen und geschäftskritischen Daten und der Einhaltung geltender Gesetze.

Unsere automatisierten Tests umfassen unter anderem Penetrationstests, toolgestützte Code-Analyse und -Dokumentation. Basierend darauf untersuchen wir persönlich den Source-Code, versuchen, die Architektur zu durchdringen und potenzielle Probleme oder Vorschläge in diesem Zusammenhang zu identifizieren und anzubieten.

Zusätzlich treten wir als „Software-as-a-Service“ (SaaS) Anbieter auf und stellen Ihnen verschiedene Teil- oder Ganzkomponenten als Software-Dienstleistung zur Verfügung, die unter Berücksichtigung aller oben genannten Sicherheitsaspekte ständig verfügbar sind. Auf diese Weise können Sie sich auf Ihre Anwendung konzentrieren, während wir bestimmte Bereiche bereitstellen.

Verwenden Sie das folgende Kontaktformular und kontaktieren Sie uns noch heute für ein unverbindliches Erstgespräch. Wir freuen uns auf Sie!