Härten von PHP für WordPress

Veröffentlicht: 2021-06-29

WordPress läuft auf PHP und ist eine Kernkomponente, auf die Sie beim Härten Ihrer WordPress-Site achten sollten. Dieser Artikel behandelt einige der häufigsten, niedrig hängenden Früchte, die Sie ansprechen können, wenn es um PHP-Sicherheit für WordPress geht.

Achtung – Seien Sie vorsichtig, wenn Sie Änderungen an Ihren PHP-Einstellungen vornehmen. Falsche Einstellungen und Syntax können Ihre Website beschädigen. Testen Sie Ihre Änderungen immer in einer Entwicklungs- oder Staging-Umgebung, bevor Sie Änderungen in der Produktion vornehmen.

Inhaltsverzeichnis

  • Verwenden Sie die neueste PHP-Version
  • Unterdrücken Sie die PHP-Version
  • Entfernen Sie alle phpinfo()-Dateien
  • PHP-Fehler und -Warnungen unterdrücken
  • Beschränken beinhaltet
  • Entfernte Datei-Includes deaktivieren
  • Gefährliche Funktionen deaktivieren oder einschränken
  • Blockieren Sie die PHP-Ausführung in sensiblen Verzeichnissen
  • Fazit

Verwenden Sie die neueste PHP-Version

Neben der Sicherstellung, dass Sie Ihr Betriebssystem, Ihren MySQL-Server, Ihren Webserver (z. B. Nginx, Apache, IIS …) patchen, ist es auch absolut entscheidend, sicherzustellen, dass Sie eine vollständig unterstützte Version von PHP 1 verwenden .

Da PHP dem Internet ausgesetzt ist (weil WordPress auf dem PHP-Interpreter läuft), ist es einem größeren Angriffsrisiko ausgesetzt, falls ein Exploit für eine Schwachstelle in PHP entdeckt wird. In einem solchen Ausmaß ist es entscheidend, PHP auf dem neuesten Stand zu halten (und mehr noch, um sich von den 5.x-PHP-Endversionen fernzuhalten), nicht nur um Angriffe zu verhindern, sondern auch um es Angreifern zu ermöglichen, Angriffe zu eskalieren, falls dies der Fall ist sie schaffen es, auf Ihrer WordPress-Website Fuß zu fassen (z. B. durch Ausnutzen einer Schwachstelle in einem WordPress-Plugin).

Unterdrücken Sie die PHP-Version

Wie die meisten Webserver-Software stellt PHP standardmäßig die Version, die es ausführt, über einen X-Powered-By-HTTP-Header bereit. Obwohl dies an sich keine Sicherheitslücke ist, wie in anderen Situationen, ist das Aufzählen von Softwareversionen im Allgemeinen für Angreifer während der Aufklärungsphase eines Angriffs nützlich. Daher würden Sie durch Deaktivieren der PHP-Version einen erfolgreichen Angriff ein wenig erschweren.

Glücklicherweise lässt sich dies mit der Einstellung „expose_php“ einfach deaktivieren. Fügen Sie in Ihrer php.ini- Konfigurationsdatei einfach Folgendes hinzu.

expose_php = Off

Entfernen Sie alle phpinfo()-Dateien

Das Erstellen einer PHP-Datei mit der Funktion phpinfo() zum Debuggen ist eine verbreitete schlechte Angewohnheit vieler PHP-Systemadministratoren. Sollte ein Angreifer auf eine 'phpinfo'-Datei stoßen (normalerweise nicht überraschend phpinfo.php genannt), erhält er eine Fülle von Informationen und Details nicht nur über die auf dem Server laufende PHP-Version, sondern auch über andere Aspekte der Website, wie z als Web- und Datenbankserver.

Wenn Sie phpinfo() wirklich ausführen müssen, ist es viel besser, dies wie folgt über die Befehlszeile zu tun.

php -i

Wenn Sie mehr als eine Konfiguration von PHP auf Ihrem System haben (sehr häufig), können Sie den folgenden Befehl verwenden, um anzugeben, welche php.ini-Datei verwendet werden soll.

php -c /etc/php/apache2/php.ini -i

PHP-Fehler und -Warnungen unterdrücken

Während Fehler, Warnungen und Ausnahmen während der Entwicklung hilfreich sind, verwenden Angreifer diese Informationen häufig, wenn sie in einer öffentlich zugänglichen Umgebung angezeigt werden, um Einblick in die Serverkonfiguration, das Anwendungslayout und die Komponenten zu erhalten.

Fehlermeldungen sind einige der häufigsten Wege zur Offenlegung von Informationen, wobei häufig Informationen wie Anwendungsinstallationspfade und Details zur Datenbankverbindung preisgegeben werden. Stellen Sie sicher, dass diese Informationen protokolliert werden, anstatt Fehler und Warnungen anzuzeigen. Weitere Informationen zu diesem Thema finden Sie in der offiziellen PHP-Dokumentation.

Glücklicherweise lässt sich dies mit der Einstellung display_errors einfach deaktivieren. Fügen Sie in Ihrer php.ini-Konfigurationsdatei einfach Folgendes hinzu.

display_errors = Off
log_errors = On

Beschränken beinhaltet

Sicherheitslücken beim Einschließen von Dateien ermöglichen es einem Angreifer, eine PHP-Anweisung include() zu kontrollieren. Während PHP jeden PHP-Code in einer eingebundenen Datei ausführt, druckt es alles andere aus (vorausgesetzt, es handelt sich um Klartext). Dies bedeutet, dass ein Angreifer, der die Kontrolle über eine Dateieinschluss-Schwachstelle übernimmt, möglicherweise etwas Ähnliches wie das folgende ausführt, wodurch er Zugriff auf sensible Systemdateien erhält. Um mehr über das Einschließen von Dateien zu erfahren, werfen Sie einen Blick auf diesen Artikel.

include "../../../../etc/passwd"

Indem Sie die Einstellung open_basedir in php.ini setzen, können Sie PHP anweisen, Includes nur innerhalb eines bestimmten Verzeichnisses und darunter zuzulassen. Obwohl dies Schwachstellen beim Einschließen von Dateien nicht beseitigt, macht es sie sicherlich eingeschränkter und verhindert auch einige fortgeschrittenere Angriffe, die zur Codeausführung führen können (wenn ein Angreifer Befehle auf Ihrem Server ausführen kann).

Sie können die PHP-Einstellung open_basedir wie folgt in Ihrer php.ini-Datei festlegen.

open_basedir = /var/www/html/example.com

Entfernte Datei-Includes deaktivieren

Neben der Beschränkung lokaler Includes auf ein bestimmtes Verzeichnis mit open_basedir ist es auch ratsam, Remote-Includes zu deaktivieren. Remote File Inclusion (RFI)-Angriffe funktionieren ähnlich wie lokale File Inclusion-Angriffe, aber anstatt dass ein Angreifer an Dateien auf dem System gebunden ist, ermöglicht Remote File Inclusion einem Angreifer, Dateien über das Netzwerk einzuschließen. Dies ist äußerst gefährlich, und die meisten RFI-Angriffe enden damit, dass ein Angreifer willkürlich Code auf Ihrem Webserver ausführen kann (als Remote Code Execution oder RCE bezeichnet).

Um entfernte Datei-Includes zu deaktivieren, verwenden Sie die PHP-Optionen allow_url_fopen und allow_url_include in Ihrer php.ini-Datei wie folgt.

allow_url_fopen = Off
allow_url_include = Off

Gefährliche Funktionen deaktivieren oder einschränken

Für den Fall, dass es einem Angreifer trotz aller Ihrer Sicherheitsmaßnahmen gelingt, eine Schwachstelle in der PHP-Sicherheit Ihres WordPress zu finden, die er ausnutzen kann, ist das Letzte, was Sie wollen, dass er beliebigen Code auf Ihrem Server ausführen kann . Wenn ein Angreifer in der Lage ist, beliebigen Code auf Ihrem Server auszuführen, kann er wahrscheinlich eine Webshell installieren oder eine Reverse-Shell einrichten, um Ihren Server weiter zu kontrollieren und damit seine schändlichen Befehle auszuführen (z. B. Malware verbreiten, Ihre Website für Phishing-Kampagnen verwenden oder denial von Dienstangriffen oder sogar das Schürfen von Kryptowährung).

Durch das Deaktivieren von Funktionen wie shell_exec() und system() können Sie Benutzer und Angreifer daran hindern, sich diese gefährlichen Funktionen zunutze zu machen. Es kann zwar berechtigte Gründe geben, diese Funktionen zu nutzen, aber sie sind sehr wenige und liegen weit auseinander, und es gibt normalerweise einen sichereren Weg, um dasselbe Ergebnis zu erzielen.

Achtung – Testen Sie Folgendes gründlich in einer Test- oder Staging-Umgebung, bevor Sie es in der Produktion ausführen, da einige Software/Plug-ins, die Sie ausführen, möglicherweise (hoffentlich legitim) von diesen Funktionen abhängen.

Das Folgende ist eine Sammlung potenziell gefährlicher Funktionen, die Sie möglicherweise in PHP deaktivieren möchten, indem Sie die Einstellung disable_functions in Ihrer php.ini-Datei verwenden.

disable_functions = php_uname, getmyuid, getmypid, passthru, leak, listen, diskfreespace,
tmpfile, link, ignore_user_abord, shell_exec, dl, exec, system, highlight_file, source,
show_source, fpaththru, virtual, posix_ctermid, posix_getcwd, posix_getegid, 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</em>

Blockieren Sie die PHP-Ausführung in sensiblen Verzeichnissen

Standardmäßig darf Ihr wp-content/uploads- Verzeichnis, das zum Hochladen von Themes, Plugins, Bildern, Videos und anderen Dateien auf Ihre Website verwendet wird, PHP-Code ausführen. Dies ist ziemlich riskant – wenn ein Angreifer irgendwie in der Lage ist, eine Schwachstelle beim Dateiupload in einem Plugin oder einem Design auszunutzen, kann er möglicherweise eine Webshell oder eine ähnliche Art von Hintertür hochladen. Da die PHP-Ausführung im wp-content/uploads- Verzeichnis erlaubt wäre, könnte dieser Angreifer diesen PHP-Code tatsächlich ausführen, um seine böswilligen Befehle auszuführen.

Dies zu verhindern ist eigentlich ganz einfach – deaktiviere die PHP-Ausführung innerhalb von wp-content/uploads und dem Verzeichnis. Der naive Weg wäre, den Zugriff auf *.php- Dateien einfach mit .htaccess zu blockieren.

<Files *.php>
deny from all
</Files>

Die obige Konfiguration ist jedoch relativ einfach zu umgehen – PHP führt in den meisten Fällen gerne .phtml .php3-Dateien aus. Der sicherste Weg wäre, die PHP-Engine innerhalb des Verzeichnisses buchstäblich zu deaktivieren. Die folgende .htaccess -Konfiguration sollte im wp-content/uploads- und im wp-includes-Verzeichnis (ein weiteres Verzeichnis, das häufig von Angreifern angegriffen wird) abgelegt werden.

php_flag engine off

PHP-Sicherheit für WordPress – letzte Gedanken

Während WordPress selbst als robuste und sichere Plattform angesehen werden muss, trägt die Umgebung und Infrastruktur, auf der Ihre WordPress-Installation ausgeführt wird, wesentlich dazu bei, die Sicherheit Ihrer Website als Ganzes zu gewährleisten. Die Implementierung der in diesem PHP-Sicherheitshärtungsleitfaden behandelten Themen bietet Ihnen eine zweite Verteidigungslinie, die es einem Angreifer erheblich erschwert, einen Angriff zu eskalieren, nachdem er eine Schwachstelle auf Ihrer WordPress-Website missbraucht hat.

Wenn Sie mehr darüber erfahren möchten, wie Sie Ihre WordPress-Site härten können, lesen Sie unseren endgültigen Leitfaden zu WordPress-Sicherheit und -Härtung.

In diesem Artikel verwendete Referenzen [ + ]

In diesem Artikel verwendete Referenzen
1 https://www.php.net/supported-versions.php