Website-Suche

Die besten Sicherheitstipps für die PHP-Härtung für Linux-Server


Es ist kein Problem, dass PHP eine der am häufigsten verwendeten Programmiersprachen für Server-Scripting ist. Für einen Angreifer ist es sinnvoll, verschiedene Wege zu finden, wie er PHP manipulieren kann, da es oft mit MySQL gekoppelt ist und den Zugriff auf die privaten Daten Ihrer Benutzer ermöglicht.

Wir behaupten keineswegs, dass PHP standardmäßig verwundbar ist oder ernsthafte Probleme hat, aber wir müssen sicherstellen, dass wir PHP so optimieren, dass es robuster als je zuvor ist.

1. Entfernen Sie unnötige PHP-Module

Standardmäßig erhalten Sie eine Reihe von PHP-Modulen, die bei verschiedenen Aufgaben hilfreich sein können, aber einige unnötige Module sind möglicherweise nicht für jedes Projekt nützlich. Um verfügbare PHP-Module aufzulisten, verwenden Sie den angegebenen Befehl:

$ php -m

Die Module befinden sich im Verzeichnis /etc/php.d/ und können unser aktuelles Verzeichnis einfach in /etc/php.d/ ändern, indem Sie den folgenden cd-Befehl verwenden.

cd /etc/php.d/

Der Grund, warum wir das Verzeichnis ändern, um Module zu entfernen, ist, dass Module im ursprünglichen Verzeichnis ganz anders benannt werden. Listen Sie nun die verfügbaren Module mit dem angegebenen Befehl auf:

$ ls

Zum Beispiel entfernen wir das curl-Modul, indem wir den angegebenen Befehl verwenden:

$ sudo rm -r 20-curl.ini

2. Deaktivieren Sie die Remote-Ausführung von PHP-Code

In den meisten Fällen kann Remote-Verbindungen nicht als vertrauenswürdig eingestuft werden. Durch das Deaktivieren des Zugriffs auf fopen-Wrapper können sie nur auf lokale Dateien zugreifen. Um fopen zu deaktivieren, müssen wir die PHP-Konfigurationsdatei mit dem angegebenen Befehl öffnen:

$ sudo nano /etc/php.ini

Verwenden Sie nun STRG + w und geben Sie allow_url_fopen ein, wodurch wir auf bestimmte Zeilen gelangen, von wo aus wir diese Optionen deaktivieren.

allow_url_fopen=Off
allow_url_include=Off

Wenn Sie mit den Änderungen fertig sind, speichern Sie die Konfigurationsdatei mit STRG + O und drücken Sie die Eingabetaste.

3. Deaktivieren Sie PHP-Informationslecks

Wenn es nicht deaktiviert ist, kann die Welt leicht erkennen, welche Version von PHP derzeit von unserem Webserver verwendet wird. Das hört sich vielleicht nicht nach einer großen Sache an, aber es kann gefährlich sein, den Angreifer über die genaue Version zu informieren.

$ sudo nano /etc/php.ini

Ändern Sie nun die Standardeinstellungen auf "Aus".

expose_php=Off

4. Deaktivieren Sie PHP-Fehlerprotokolle

Standardmäßig ist jeder Fehler unseres Webservers für unsere Besucher, einschließlich Angreifer, sichtbar. Um sicherzustellen, dass keiner der Fehler für irgendjemanden sichtbar ist, müssen wir Änderungen in unserer PHP-Konfigurationsdatei vornehmen.

$ sudo nano /etc/php.ini

Ändern Sie die Standardeinstellung für die Anzeige von Fehlerprotokollen auf "Aus".

display_errors = Of

Aber was ist, wenn Sie ein Entwickler sind und Fehlerprotokolle benötigen, um Entwicklungsprobleme zu beheben? Keine Sorge, es gibt eine Möglichkeit, Ihre Protokolldateien zu erhalten, indem Sie einfach eine kleine Änderung in derselben Konfigurationsdatei vornehmen.

Wir müssen nur log_errors aktivieren und einen Pfad zu error_log angeben, in dem unsere Protokolldateien gespeichert werden.

log_errors=On
error_log=/var/log/httpd/php_scripts_error.log

5. PHP Ressourcensteuerung

Unserer Meinung nach ist die Verwaltung von Ressourcen der wichtigste Teil bei der Sicherung von PHP. Hier werden wir eine feste Menge an Ausführungszeit, Eingabezeit und Speicherlimit zuweisen, so dass die Ausführung nach einer bestimmten Zeit gestoppt wird, wenn unser Skript irgendwie kompromittiert wird.

Wir haben 25 Sekunden für die Ausführungs- und Eingabezeit und ein Speicherlimit von 30 MB gewählt. Sicher können Sie es nach Ihren Bedürfnissen anpassen.

max_execution_time = 25
max_input_time = 25
memory_limit = 30M

6. Beschränken Sie den Zugriff auf PHP-Dateien

Um den Dateizugriff einzuschränken, werden wir open_basedir aktivieren, die sicherstellt, dass PHP nur Dateien aus unseren aufgelisteten Verzeichnissen enthalten kann.

Wichtig: Dies wird alle anderen Verzeichnisse auf die Sperrliste setzen und erfordert, dass wir wichtige Verzeichnisse manuell hinzufügen, was auch das Hinzufügen von temporären Dateien und Sitzungsverzeichnissen beinhaltet.

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

7. PHP-Datei-Uploads konfigurieren

Wenn Ihre Anwendung das Hochladen von Dateien vom Benutzerende nicht erfordert, wird immer empfohlen, das Hochladen von Dateien zu deaktivieren. Dies verhindert, dass Angreifer gefährliche Skripte hochladen, die am Ende die gesamte Anwendung beschädigen können.

file_uploads = Off

Aber was ist, wenn Ihre Anwendung so konzipiert ist, dass sie Dateien vom Benutzerende abruft? In diesem Fall müssen Sie Dateiuploads aktivieren, aber versuchen Sie, den maximalen Speicherplatz zu reduzieren und die Anzahl der maximalen Dateien zu reduzieren, die mit einer einzigen Anforderung hochgeladen werden können.

file_uploads = On
upload_max_filesize = 1M
max_file_uploads = 1

In PHP werden die temporären Dateien standardmäßig in einem Verzeichnis abgelegt, das alle Systembenutzer schreiben können. Der Standardspeicherort muss an einen sichereren Ort umgestellt werden, und stellen Sie sicher, dass er sich nicht im Webstammverzeichnis befindet.

Da wir open_basedir verwendet haben, werden wir denselben Standort verwenden, den wir bereits auf die Whitelist gesetzt haben.

upload_tmp_dir = /var/lib/php/tmp_upload

8. Deaktivieren Sie gefährliche PHP-Funktionen

PHP verfügt über verschiedene Funktionen, die standardmäßig aktiviert sind und für Entwicklungszwecke hilfreich sein können. Aber viele Funktionen können von Hackern genutzt werden, um unseren Webserver auszunutzen, und ihre Deaktivierung fügt eine zusätzliche Sicherheitsebene hinzu.

Wir haben einen deaktivierten Satz von Funktionen und stellen sicher, dass wir sie überprüfen, bevor wir Änderungen an der Konfigurationsdatei vornehmen.

disable_functions = exec,passthru,shell_exec,system,proc_open,popen,curl_exec,curl_multi_exec,parse_ini_file,show_source

9. SOAP-Cache-Verzeichnis ändern

Da wir das standardmäßige temporäre Verzeichnis und die Sitzung geändert haben, gilt das Gleiche für den SOAP-Cache, da er nicht im Standardverzeichnis gespeichert werden sollte. Stellen Sie sicher, dass es an einem sicheren Ort gespeichert ist.

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

10. Kontrollieren Sie die PHP-POST-Größe

Durch die Kontrolle der POST-Größe können wir unseren Server vor einem Hacker schützen, der versucht, Serverressourcen durch das Senden großer Dateien zu bündeln. Das bewahrt uns vor unerwünschten Serverabstürzen und langsamen Reaktionszeiten.

post_max_size=4M

11. Schützen Sie PHP-Konfigurationen

Beim Entfernen unnötiger Dateien entfernen wir oft einige wichtige Dateien oder sogar Verzeichnisse. Wir müssen also die Einstellungen so anpassen, dass sie auch von Root-Benutzern nicht gelöscht werden können. Um Dateien und Verzeichnisse zu erstellen, werden wir chattr mit verschiedenen Flags verwenden.

Sobald Sie den angegebenen Befehl verwendet haben, können Sie eine bestimmte Datei nicht mehr ändern oder entfernen.

$ sudo chattr +i /etc/php.ini

Beim Versuch, eine unveränderliche Datei zu entfernen, wird die Fehlermeldung "Operation nicht zulässig" angezeigt.

$ sudo rm -r /etc/php.ini

Aber was ist, wenn Sie diese Dateien weiterhin schreiben und sie gleichzeitig unveränderlich machen möchten? Sie können dies leicht erreichen, indem Sie das +a-Flag anstelle von +i verwenden.

$ sudo chattr +a /etc/php.ini

Es kann einige Fälle geben, in denen Sie die alte Konfigurationsdatei nicht mehr benötigen und in diesem Fall müssen wir Attribute deaktivieren.

$ sudo chattr -i /etc/php.ini

Wenn Sie sich für +a-Attribute entschieden haben, um Dateien unveränderlich zu machen, können Sie dies mit dem angegebenen Befehl umkehren:

$ sudo chattr -a /etc/php.ini

12. Verwenden Sie SSL-Zertifikate für HTTPS

Heutzutage empfiehlt jeder moderne Browser wie Google Chrome, Firefox, Opera und andere die Verwendung von HTTPS für Webserver. Da HTTPS einen sicheren und verschlüsselten Zugriffskanal für nicht vertrauenswürdige Websites bietet, können wir unseren Benutzern eine zuverlässige Erfahrung bieten.

Durch das Hinzufügen von HTTPS können wir uns vor XSS-Angriffen schützen und verhindern, dass Hacker transportierte Daten mithilfe von Codes lesen.

Um HTTPS zu aktivieren, werden wir das kostenlose Let's Encrypt SSL-Zertifikat auf dem Server installieren und verwenden.

$ sudo dnf install epel-release 
sudo dnf install certbot python3-certbot-apache mod_ssl
sudo certbot --apache -d domain.com   [For Apache]
sudo certbot --nginx -d domain.com    [For Nginx]

13. Aktualisieren Sie PHP regelmäßig

Da es sich um eine Open-Source-Sprache handelt, wird sie fast täglich gepatcht. Es mag kein großer Schritt zu sein scheinen, aber es kann Sie vor einer großen Verwundbarkeit bewahren. Stellen Sie also sicher, dass Sie Ihre PHP-Pakete auf dem neuesten Stand halten, um Sie vor vielen möglichen Schwachstellen zu bewahren.

# yum update & yum upgrade    [On RHEL-based systems]
apt update && apt upgrade   [On Debian-based systems]

Dies war unsere Meinung, wie Sie die Sicherheit von PHP in Linux-Systemen einfach verbessern können. In diesem Tutorial haben wir versucht, die Dinge so einfach wie möglich zu machen, und wenn Sie immer noch Zweifel haben, lassen Sie es uns bitte in den Kommentaren wissen.

Verwandte Artikel: