So härten Sie Ihr PHP für mehr Sicherheit

PHP ist auf vielen Websites weit verbreitet & Anwendungen, sollte aber aus Sicherheitsgründen gehärtet werden. Hier sind einige erweiterte Tipps zum Sichern Ihrer PHP-Konfigurationsdatei.


Wie man PHP härtet

PHP ist bei weitem die beliebteste Web-Back-End-Programmiersprache, die heute verwendet wird. Bis heute vorbei 80% der Websites mit einem Backend PHP implementieren. WordPress, Joomla und Drupal werden alle davon unterstützt. Leider ist PHP ein beliebtes Ziel für Hacking-Versuche geworden, weshalb die Sicherung seiner Konfiguration von entscheidender Bedeutung ist. Befolgen Sie diese einfachen Schritte, um Ihre PHP-Konfiguration zu sichern und sie vor Hacking-Schwachstellen zu schützen.

Suchen Sie die PHP-Konfigurationsdatei

Der Name der Konfigurationsdatei für PHP lautet php.ini, die Sie bearbeiten müssen. Der Speicherort der Datei hängt von Ihrem Hosting-Unternehmen und dem Servertyp ab.

Mit Shared Hosting bearbeiten

Wenn Sie nicht sicher sind, wo sich Ihre php.ini-Datei befindet, wenden Sie sich an Ihren Hosting-Anbieter. Einige Anbieter verlangen, dass Sie PHP-Einstellungen in der Datei “.htaccess” im Webstamm ablegen. In diesem Fall sollten PHP-Einstellungen eine pro Zeile im Format „php_value Name value“ hinzugefügt werden. Beachten Sie, dass Ihr Hosting-Anbieter möglicherweise verhindert, dass bestimmte Einstellungen geändert werden.

Bearbeiten Sie mit einem VPS oder einem dedizierten Server

Web Host Manager (WHM) vereinfacht das Bearbeiten der PHP-Konfigurationsdatei durch Bereitstellung einer einfachen Benutzeroberfläche. Suchen Sie einfach den Abschnitt “Service Configuration” in WHM und klicken Sie auf “PHP Configuration Editor”. Wählen Sie auf der angezeigten Seite “Erweiterter Modus”..

PHP-Konfigurationseditor

Wenn Sie kein Control Panel wie WHM verwenden, müssen Sie die php.ini direkt öffnen und bearbeiten. Der Speicherort von php.ini hängt vom Betriebssystem Ihres Servers ab. Viele Linux-Systeme platzieren die Datei unter dem Pfad “/etc/php.ini”. Sie können den Standort über die Befehlszeile bestätigen. Melden Sie sich zunächst über SSH beim Server an (Anweisungen erhalten Sie von Ihrem Hosting-Anbieter). Sobald die Verbindung hergestellt ist, geben Sie den Befehl „php –ini“ ein und drücken Sie die Eingabetaste. Suchen Sie nach der zurückgegebenen Zeile mit dem Titel “Geladene Konfigurationsdatei” und notieren Sie sich den Dateipfad “php.ini”.

Sie können die php.ini mit einem Texteditor öffnen und bearbeiten, der in der Befehlszeile ausgeführt wird, z. B. “nano” für Linux. Geben Sie einfach “nano /path/to/php.ini” ein und drücken Sie die Eingabetaste.
Nano für Linux

php.ini Struktur

In der php.ini wird jede Einstellung in einer eigenen Zeile im Format „Einstellungsname = Einstellungswert“ platziert. Jede Zeile, die mit einem Semikolon beginnt, ist ein Kommentar. Aktualisieren Sie daher keine dieser Zeilen.

Konfigurationseinstellungen bearbeiten

Unten finden Sie eine Liste der Einstellungen, die überprüft und aktualisiert werden sollten, um die Sicherheit zu verbessern. Die Einstellungen sind je nach Verwendungszweck in mehrere Abschnitte unterteilt.

Abschnitt 1: Fernverbindungen

allow_url_fopen = 0
allow_url_include = 0

Lassen Sie fopen Wrapper keine Remote-URLs öffnen. Remote-Inhalten kann nicht immer vertraut werden. Durch Deaktivieren dieser Optionen wird sichergestellt, dass fopen-Wrapper nur lokalen Inhalt laden können.

Abschnitt 2: Laufzeiteinstellungen

max_input_time = 30
max_execution_time = 30

Begrenzen Sie die maximal zulässige Zeit für die Verarbeitung von Eingaben sowie die maximale Zeitdauer, die ein PHP-Skript ausführen kann. Hier sind beide Einstellungen auf 30 Sekunden begrenzt. Dies stellt sicher, dass ein Skript, falls es kompromittiert wird, keine Eingaben liest oder über einen längeren Zeitraum ausgeführt wird. Ein gut codiertes Skript sollte nicht länger als 30 Sekunden dauern.

memory_limit = 8M

Stellen Sie sicher, dass ein PHP-Skript niemals mehr als 8 MB Speicher belegt. Falls ein Skript kompromittiert wurde, begrenzt diese Einstellung effektiv die Speichermenge, die das Skript verwenden kann.

register_globals = off

Durch Deaktivieren dieser Einstellung wird effektiv verhindert, dass Anforderungsdaten automatisch als Variable gespeichert werden. Das Registrieren globaler Variablen wirft mehrere Bedenken auf. Ein Beispiel ist, dass Umgebungsvariablen leicht geändert werden können. Stellen Sie sicher, dass diese Einstellung deaktiviert ist, um diese Probleme zu vermeiden.

expose_php = 0

Standardmäßig werden das Vorhandensein von PHP sowie dessen Versionsnummer als Teil der HTTP-Antworten angezeigt. Da dies unnötige Einblicke in den Server bietet, ist es ratsam, diesen zu deaktivieren.

cgi.force_redirect = 1

Stellen Sie sicher, dass PHP nur über eine Webserver-Umleitungsregel ausgeführt werden kann. Dies verhindert, dass PHP direkt aufgerufen wird, was die Sicherheit verbessert.

Abschnitt 3: Einschränkungen für Eingabedaten

post_max_size = 256K
max_input_vars = 100

Hacker können versuchen, Webanwendungsressourcen zu überfluten, indem sie Massendaten an sie senden, wodurch die Übertragungsgeschwindigkeit und die verfügbaren Serverressourcen verringert werden. Der Effekt dieser Art von Angriff kann minimiert werden, indem die maximale Größe der POST-Daten verringert und auch die Menge der Anforderungsdaten begrenzt wird. Beachten Sie, dass “post_max_size” auch die maximale Größe von Datei-Uploads beeinflusst. Wenn Ihre Anwendung über Funktionen zum Hochladen von Dateien verfügt, stellen Sie sicher, dass der Wert dieser Einstellung mindestens so groß ist wie “upload_max_filesize”..

Abschnitt 4: Fehlerbehandlung

display_errors = 0
display_startup_errors = 0

Fehlermeldungen sollten dem Endbenutzer niemals angezeigt werden, da die Meldungen häufig detaillierte Informationen zum Anwendungscode und zum Server enthalten. Diese Informationen könnten möglicherweise zur Unterstützung von Hackern verwendet werden. Protokollieren Sie stattdessen Fehlermeldungen in einer sicheren Datei auf dem Server.

log_errors = 1
error_log = / home / johndoe / error_log

PHP-Fehler sollten protokolliert werden, um den Anwendungscode zu debuggen und mögliche Schwachstellen zu untersuchen. Wenn Sie einen Dateimanager wie den in cPanel enthaltenen verwenden, befindet sich ein bequemer und sicherer Speicherort für das Fehlerprotokoll direkt außerhalb des Webstamms.

Abschnitt 5: Dateizugriff einschränken

open_basedir = "/ home / johndoe / public_html"

Open_basedir stellt sicher, dass PHP Dateien nur aus den aufgelisteten Verzeichnissen enthalten kann. Dies verbessert die Sicherheit, indem verhindert wird, dass PHP-Skripte unbeabsichtigt auf sichere Dateien außerhalb der Whitelist-Pfade zugreifen. Beachten Sie, dass Sie jedes Verzeichnis, auf das PHP zugreifen muss, zur Whitelist hinzufügen müssen, einschließlich der temporären Datei-Upload- und Sitzungsverzeichnisse (siehe unten). Sie können der Liste mehrere Verzeichnisse hinzufügen, indem Sie zwischen jedem Verzeichnis einen Doppelpunkt einfügen. Zum Beispiel:

open_basedir = "/ home / johndoe / public_html: / var / lib / php / tmp_upload: / var / lib / php / session"

Abschnitt 6: Datei-Uploads

file_uploads = 0

Wenn Ihre Anwendung keine Funktionen zum Hochladen von Dateien von den Computern der Benutzer enthält, ist es ratsam, diese PHP-Funktion vollständig zu deaktivieren. Dies verhindert, dass Hacker Skripte hochladen, die dann möglicherweise in die Anwendung eingefügt werden.

file_uploads = 1
upload_max_filesize = 1M

Wenn für Ihre Anwendung Funktionen zum Hochladen von Dateien erforderlich sind, halten Sie “upload_max_filesize” auf einen möglichst kleinen Wert.

upload_tmp_dir = / var / lib / php / tmp_upload

Standardmäßig werden temporäre Datei-Uploads in einem Verzeichnis abgelegt, das von allen Systembenutzern beschrieben werden kann. Der Speicherort sollte in ein sichereres Verzeichnis verschoben werden. Stellen Sie sicher, dass sich der neue Verzeichnisspeicherort nicht im Webstamm befindet. Wenn Sie einen Dateimanager wie den in cPanel enthaltenen verwenden, befindet sich ein einfacher und sicherer Speicherort zum Erstellen des Upload-Verzeichnisses direkt außerhalb des Webstamms (d. H. Das gleiche Verzeichnis, in dem sich public_html befindet). Ein weiterer sicherer Speicherort ist das Erstellen des Verzeichnisses im PHP-Verzeichnis in „/ var / lib“. Der Pfad hängt vom Betriebssystem ab, d. H. “/ Var / lib / php” oder “/ var / lib / php5”. Wenn Einschränkungen für open_basedir gelten, stellen Sie sicher, dass das temporäre Upload-Verzeichnis in der Whitelist open_basedir enthalten ist.

Abschnitt 7: Sitzungssicherheit

Sitzungen werden verwendet, um Informationen über mehrere Anforderungen für einzelne Benutzer hinweg zu erhalten. Die eigentlichen Informationen werden auf dem Server gespeichert, und ein Cookie (oder weniger sicher HTTP-Anforderungsdaten) mit einer Sitzungs-ID wird zur Überprüfung der Benutzer verwendet. Sitzungen werden unter anderem zur Authentifizierung in einer Webanwendung verwendet. Dies ist einer der Gründe, warum die Sicherheit so wichtig ist. Die folgenden Einstellungen können aktualisiert werden, um das Risiko des Abfangens von Sitzungen zu verringern.

session.use_strict_mode = 1

Erstellen Sie eine neue Sitzungs-ID, wenn der Browser eine zuvor nicht initialisierte ID sendet. Dies hilft, einen Angriff zu verhindern, der als Sitzungsfixierung bezeichnet wird.

session.cookie_httponly = 1

Ermöglichen Sie den Zugriff auf das Sitzungscookie nur über eine HTTP-Anforderung und nicht über andere Quellen wie JavaScript. Dies hilft, einen Angriff zu verhindern, der als XSS-Angriff bezeichnet wird.

session.use_cookies = 1
session.use_only_cookies = 1
session.use_trans_sid = 0

Speichern Sie die Sitzungs-ID in einem Cookie, anstatt sie als URL-Parameter zu senden. Dies hilft, die Sitzung eines Benutzers sicher zu halten, indem Angriffe zur Sitzungsfixierung verhindert werden.

session.name = custom_session_id

Cookies speichern ihre Informationen im Schlüsselwertformat. Es wird empfohlen, den Standardschlüsselnamen des Cookies zu aktualisieren, in dem die Sitzungs-ID gespeichert ist. Aktualisieren Sie “custom_session_id” mit einem benutzerdefinierten Wert.

session.cookie_secure = 1

Wenn Ihre Webanwendung aus Sicherheitsgründen über das HTTPS-Protokoll ausgeführt wird, aktivieren Sie diese Einstellung, um den Zugriff auf Cookies mit Sitzungs-IDs nur über eine sichere Verbindung zu erzwingen.

session.referer_check = example.com

Überprüfen Sie, woher die Anforderung stammt, um festzustellen, ob der Zugriff auf Sitzungsdaten zulässig ist. Aktualisieren Sie diesen Einstellungswert auf den Domänennamen Ihrer Anwendung, um zu verhindern, dass auf Sitzungsinformationen zugegriffen wird, wenn ein Skript von einer externen Quelle geladen wird.

session.save_path = "/ var / lib / php / session"

Der Standardpfad zum Speichern von Sitzungsdateien kann von allen Systembenutzern beschrieben werden. Der Speicherort sollte in ein sichereres Verzeichnis verschoben werden. Stellen Sie sicher, dass sich der neue Verzeichnisspeicherort nicht im Webstamm befindet. Wenn Sie einen Dateimanager wie den in cPanel enthaltenen verwenden, befindet sich ein einfacher Speicherort zum Erstellen des Sitzungsverzeichnisses direkt außerhalb des Webstamms (d. H. Das gleiche Verzeichnis, in dem sich public_html befindet). Ein weiterer sicherer Speicherort ist das Erstellen des Verzeichnisses im PHP-Verzeichnis in „/ var / lib“. Der Pfad hängt vom Betriebssystem ab, d. H. “/ Var / lib / php” oder “/ var / lib / php5”. Wenn Einschränkungen für open_basedir gelten, stellen Sie sicher, dass der Pfad zum Speichern der Sitzung in der Whitelist von open_basedir enthalten ist.

session.hash_function = sha512

SHA-512 ist ein sicherer Hashing-Algorithmus zum Erstellen von Sitzungs-IDs als die Standard-MD5-Hash-Funktion. Dieser Algorithmus ist in PHP Version 5.3+ verfügbar. Wenn Sie eine kleinere Version von PHP ausführen, verwenden Sie stattdessen den SHA1-Hash-Algorithmus. Setzen Sie dazu “session.hash_function = 1”..

session.bug_compat_42 = 0
session.bug_compat_warn = 0

Durch Deaktivieren dieser Einstellungen wird sichergestellt, dass Sitzungsvariablen nicht global initialisiert werden können, was die Sicherheit verbessert.

Deaktivieren Sie gefährdete Funktionen

disable_functions = ini_set, php_uname, getmyuid, getmypid, passthru, leck, listen, diskfreespace, tmpfile, link, ignore_user_abord, shell_exec, dl, set_time_limit, exec, system, Highlight_file, source, show_source, fpaththrct, virt_, pos_ posix_geteuid, posix_getgid, posix_getgrgid, posix_getgrnam, posix_getgroups, posix_getlogin, posix_getpgid, posix_getpgrp, posix_getpid, POSIX, _getppid, posix_getpwnam, posix_getpwuid, posix_getrlimit, posix_getsid, posix_getuid, posix_isatty, posix_kill, posix_mkfifo, posix_setegid, posix_seteuid, posix_setgid, posix_setpgid, posix_setsid, posix_setuid, posix_times, posix_ttyname, posix_uname, proc_open, proc_close, proc_get_status, proc_nice, proc_terminate, phpinfo, popen, curl_exec, curl_multi_exec, parse_ini_file, allow_url_fopen, allow_url_include, pc

Mehrere PHP-Funktionen können offene Türen für Webanwendungs-Hacks bieten, wenn sie nicht sorgfältig verwendet werden. Das Senden nicht ordnungsgemäß validierter Eingaben an viele dieser Funktionen führt beispielsweise zu Sicherheitsproblemen. Das Deaktivieren dieser Funktionen ist eine einfache und effektive Lösung des Problems. Wenn Ihre Anwendung jedoch eine der aufgeführten Funktionen benötigt, entfernen Sie sie aus der Liste.

Seifen-Cache

soap.wsdl_cache_dir = / var / lib / php / soap_cache

Wie bei Datei-Uploads und Sitzungsdaten sollten SOAP-Cache-Daten nicht im temporären Standardverzeichnis gespeichert werden. Stellen Sie dies auf ein sichereres Verzeichnis ein.

Starten Sie PHP neu

Nachdem Sie Änderungen an der Datei php.ini vorgenommen haben, müssen Sie den Webserver neu starten. WHM bietet eine Schaltfläche zum Neustarten des Servers nach dem Bearbeiten der Datei. Wenn Sie kein Control Panel wie WHM verwenden, müssen Sie Ihren Server über die Befehlszeile neu starten. Geben Sie für Apache den Befehl “sudo apachectl graceful” ein und drücken Sie die Eingabetaste.

Fazit

Durch die Aktualisierung dieser Einstellungen bleibt Ihre PHP-Umgebung weiterhin vor Hackversuchen geschützt. Der Schutz Ihrer PHP-Umgebung vor Hackern ist ein wichtiger Schritt zum Schutz Ihres Unternehmensrufs. Beachten Sie jedoch, dass eine schlecht codierte Anwendung auch bei einer gehärteten PHP-Konfiguration immer eine offene Tür für Hacks ist. Beginnen Sie damit, Ihre Konfiguration gehärtet zu halten, und schreiben Sie von dort aus immer sicheren Anwendungscode.

Jeffrey Wilson Administrator
Sorry! The Author has not filled his profile.
follow me