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.
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.
| Funktion | Beschreibung |
|---|---|
| exec | Ermöglicht die Ausführung beliebiger Befehle, was von Angreifern ausgenutzt werden kann, um unbefugten Zugriff oder Kontrolle zu erlangen. |
| passthru | 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 Remote-Code-Ausführung ausgenutzt werden können und die Sicherheit des Servers gefährden. |
| system | Führt ein externes Programm aus und zeigt die Ausgabe an, was sensible Informationen preisgeben oder nicht autorisierten Code ermöglichen kann. |
| proc_open | Ermöglicht die Ausführung externer Prozesse, was bei unbereinigter Benutzereingabe zu Sicherheitslücken führen kann. |
| popen | Öffnet einen Prozessdateizeiger, wodurch Angreifer Befehle ausführen und die Serversicherheit gefährden können. |
| parse_ini_file | Kann sensible Konfigurationsdetails preisgeben – bei manipulierbarem Dateipfad führt das zu Sicherheitsverletzungen. |
| show_source highlight_file |
Zeigt den Quellcode einer Datei an und gibt damit möglicherweise sensible Informationen oder geistiges Eigentum preis. |
| eval | Wertet eine Zeichenkette als PHP-Code aus – potenzielle Sicherheitslücke durch Code-Injektion bei unsicheren Eingaben. |
| create_function | Erstellt eine anonyme Funktion aus einer Zeichenkette – riskant bei unzureichend validierter Benutzereingabe (Code-Injektion). |
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:
| PHP-Konfiguration | Empfohlene Einstellung & Begründung |
|---|---|
| display_errors | „Off“, um zu verhindern, dass Benutzern Fehlermeldungen mit sensiblen Informationen oder Systempfaden angezeigt werden. |
| expose_php | „Off“ – unterdrückt die PHP-Versionsinformationen in HTTP-Headern. Schützt vor bekannten Exploits gegen bestimmte Versionen. |
| allow_url_fopen allow_url_include |
Unbedingt auf „Off“ setzen, um Sicherheitslücken wie Remote File Inclusion (RFI) und Remote Code Execution (RCE) zu verhindern. |
| session.cookie_secure | „On“ – stellt sicher, dass Session-Cookies nur über HTTPS übertragen werden. |
| session.cookie_httponly | „On“ – verhindert den Zugriff clientseitiger Skripte (z. B. JavaScript) auf Cookies und reduziert XSS-Risiken. |
| session.use_strict_mode | „On“ – aktiviert striktes Session-Handling und schützt vor Session-Fixation-Angriffen. |
| session.use_only_cookies | „On“ – stellt sicher, dass Session-IDs ausschließlich über Cookies und nicht per URL übertragen werden. |
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!
| PHP Directive | Beschreibung |
|---|---|
| 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 abzumildern. |
| 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. |
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.
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!