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"