Sicherung von wp-config.php ist öffentlich zugänglich
Was es ist
Im Webroot Ihrer WordPress-Installation ist eine Datei wie wp-config.php.bak, wp-config.php.old, wp-config.txt oder wp-config.php~ öffentlich erreichbar. Das entsteht am häufigsten so:
- Sie haben
wp-config.phpin einem Texteditor bearbeitet und dieser hat eine automatische Sicherung angelegt (wp-config.php~). - Vor einem Eingriff haben Sie alte Versionen durch Umbenennen „abgesichert“ (
cp wp-config.php wp-config.php.bak). - Der Hoster oder ein Plugin hat eine automatische Sicherung angelegt und sie daneben abgelegt.
Warum das ein Problem ist
Der entscheidende Unterschied zur normalen wp-config.php: PHP-Dateien führt Apache/nginx aus — sie liefern HTML-Output, nicht den Code. Eine Datei mit der Endung .bak oder .txt sendet der Server jedoch als reinen Text. Ein Angreifer öffnet https://example.de/wp-config.php.bak und erhält:
DB_NAME,DB_USER,DB_PASSWORD,DB_HOST— Zugang zur Datenbank.AUTH_KEY,SECURE_AUTH_KEY,LOGGED_IN_KEY,NONCE_KEY— Verschlüsselungsschlüssel für Session-Cookies.table_prefix— die konkreten Tabellennamen.
Mit den Schlüsseln signiert der Angreifer die Cookies des Admins. Mit der Datenbank räumt er den Inhalt ab und setzt das Passwort. In der Regel ist damit alles vorbei.
Wie man es behebt
Schritt 1 — alle .bak / .old / .txt Sicherungen löschen
cd /var/www/example.de
ls -la wp-config*
# finden und löschen
rm wp-config.php.bak wp-config.php.old wp-config.php~ wp-config.txtDurchsuchen Sie auch das gesamte Webroot:
find . -type f \( -name "*.bak" -o -name "*.old" -o -name "*~" \) -lsSchritt 2 — das rotieren, was in der .bak-Datei stand
Gehen Sie davon aus, dass jemand die Datei heruntergeladen hat. Tauschen Sie aus:
- Das Datenbank-Passwort. Aktualisieren Sie nach der Änderung auch
wp-config.php:define('DB_PASSWORD', 'neuespasswort');. - Die WordPress Security Keys (
AUTH_KEYusw.). Neue erzeugen Sie unter api.wordpress.org/secret-key/1.1/salt/ und ersetzen sie. Diese Änderung meldet alle aktiven Benutzer ab — das ist in Ordnung.
Schritt 3 — .bak / .old Muster auf dem Webserver blockieren
Damit eine weitere versehentlich erstellte Sicherung nicht nach außen gelangt:
nginx:
location ~* \.(bak|old|backup|orig|swp|save|~)$ {
deny all;
return 404;
}Apache (.htaccess):
<FilesMatch "\.(bak|old|backup|orig|swp|save|~)$">
Require all denied
</FilesMatch>Schritt 4 — richtig sichern
Eine Sicherung der wp-config.php gehört außerhalb des Webroot, in eine Versionsverwaltung (privates Git, S3-Bucket mit SSE, dediziertes Backup-Hosting). Niemals neben die aktive Version.