Sicherheitshinweise für PHP/MySQL-Anwendungen
Allgemeine Empfehlungen zur Absicherung von Apache-Servern, die PHP/MySQL-Anwendungen wie ConfTool betreiben – und nützlich für die meisten produktiven PHP-Umgebungen.
Immer HTTPS / TLS verwenden
Jede Anwendung, die Logins, personenbezogene Daten oder Zahlungsinformationen verarbeitet, muss ausschließlich über eine verschlüsselte Verbindung ausgeliefert werden. Besorgen Sie sich ein TLS-Zertifikat (z. B. ein kostenloses Zertifikat von Let’s Encrypt über certbot) und leiten Sie sämtlichen unverschlüsselten HTTP-Verkehr auf HTTPS um.
# Im Virtual Host: HTTPS erzwingen
<VirtualHost *:80>
ServerName conference.example.org
Redirect permanent / https://conference.example.org/
</VirtualHost>
Sobald HTTPS erzwungen wird, aktivieren Sie HTTP Strict Transport Security, damit Browser nicht mehr auf unverschlüsselte Verbindungen zurückfallen (siehe Security-Header unten).
Sicherheit des Apache-Servers
Zugriff auf Backup-Dateien sperren
Es empfiehlt sich, den Zugriff auf alle Backup-Dateien zu sperren. Handelt es sich dabei beispielsweise um PHP-Dateien, werden diese vom Server üblicherweise nicht ausgeführt und können Parameter wie das Passwort Ihrer MySQL-Datenbank offenlegen.
Um den Zugriff auf Backup-Dateien mit den Endungen .bak, .BAK und ~ zu sperren, fügen Sie Folgendes in Ihre httpd.conf (oder den entsprechenden Virtual Host) ein:
<FilesMatch "(\.bak|\.BAK|~)$">
Require all denied
</FilesMatch>
<Directory "/home/conftool/">
# Verzeichnisoptionen einschränken
# -Indexes deaktiviert automatische Verzeichnisauflistungen
Options -Indexess
# -Includes deaktiviert Server-Side Includes (SSI)
Options -Includes
# -ExecCGI verhindert die Ausführung von CGI-Skripten in diesem Verzeichnis.
Options -ExecCGI
# Legt fest, wer auf Inhalte dieses Verzeichnisses zugreifen darf.
Require all granted
# Zugriff auf Backup-Dateien verhindern!
<FilesMatch "(\.bak|\.BAK|~)$">
Require all denied
</FilesMatch>
</Directory>
Die HTTP-Methode TRACE deaktivieren
Die HTTP-Methode TRACE gibt die empfangene Anfrage zurück. Für eine normale Anwendung hat sie keinen Nutzen und wurde in der Vergangenheit für Cross-Site-Tracing-Angriffe (XST) missbraucht, um ansonsten geschützte Header wie Cookies auszulesen. Deaktivieren Sie sie global in Ihrer Server- oder Virtual-Host-Konfiguration:
TraceEnable Off
Bitte beachten Sie:
TraceEnable ist eine Direktive auf Server-Ebene – platzieren Sie sie in der httpd.conf oder innerhalb eines <VirtualHost>-Blocks. In einem <Directory>-Block oder einer .htaccess-Datei kann sie nicht gesetzt werden.
Security-Header
Mit aktiviertem mod_headers fügen Sie Antwort-Header hinzu, die gängige Angriffsflächen verringern. Setzen Sie HSTS erst, wenn HTTPS zuverlässig funktioniert.
Header always set Strict-Transport-Security "max-age=63072000; includeSubDomains"
Header always set X-Content-Type-Options "nosniff"
Header always set Content-Security-Policy "frame-ancestors 'self'"
Header always set Referrer-Policy "no-referrer"