Wie man die wp-config.php schützen kann

Ein Entwickler schützt eine Website und seine wp-config.php

Übersicht

Es ist wichtig, die Datei wp-config.php zu schützen, da sie sensible Informationen wie Datenbankverbindungsdaten und Authentifizierungsschlüssel enthält. Um die Sicherheit dieser Datei zu gewährleisten, sollte sie in einem sicheren Verzeichnis auf dem Server aufbewahrt werden, das nicht öffentlich zugänglich ist. Außerdem sollten die entsprechenden Berechtigungen so gesetzt werden, dass nur die erforderlichen Benutzer/innen den Inhalt dieser Datei ändern oder einsehen können. Wenn du diese Schritte befolgst, kannst du die Sicherheitsrisiken für deine WordPress-Website minimieren.

Denn WordPress ist ein unglaublich vielseitiges und beliebtes Content Management System. Leider macht es seine Beliebtheit auch zu einem Ziel für böswillige Akteure, die versuchen, Schwachstellen im System auszunutzen. Einer der wichtigsten Schritte zur Sicherung deiner WordPress-Website ist der Schutz der wp-config.php, einer wichtigen Konfigurationsdatei, die sensible Informationen über die Einrichtung deiner Website enthält. Ohne geeignete Sicherheitsmaßnahmen könnten sich Eindringlinge Zugang zu dieser Datei verschaffen und erheblichen Schaden anrichten.

Der Schutz der Datei wp-config.php ist daher für jeden Betreiber einer WordPress-Website unerlässlich. Diese Datei enthält wichtige Informationen, die vertraulich und sicher aufbewahrt werden sollten, z. B. Datenbankpasswörter und andere Anmeldedaten. Eine der häufigsten Sicherheitsbedrohungen für diese Datei ist der sogenannte Directory Traversal Angriff. Bei dieser Art von Angriff versuchen Hacker, auf die Dateien eines Systems zuzugreifen, indem sie durch Ordner navigieren, um die Datei wp-config.php zu erreichen und so an sensible Daten zu gelangen.

Um sich vor dieser Art von Angriffen zu schützen, ist es wichtig, dass Webmaster/innen sicherstellen, dass ihre Serverberechtigungen korrekt eingestellt sind, so dass nur sie volle Zugriffsrechte auf ihre gesamte Website haben. Außerdem ist es ratsam, die Datei wp-config.php zu verschieben.

Vorteile:

  1. Schützt sensible Daten wie den Datenbanknamen, den Benutzernamen und das Passwort.
  2. Verhindert den unbefugten Zugriff auf die Datenbank deiner Website.
  3. Erhöht die Sicherheit deiner Website, indem wichtige Informationen vor böswilligen Nutzern versteckt werden.
  4. Verhindert bösartige Angriffe wie SQL-Injection und Remote Code Execution.
  5. Hilft dir bei der Einhaltung von Branchenstandards wie zum Beispiel GDPR (1*), indem Nutzerdaten nicht zugänglich sind. Das gilt adäquat auch für andere Richtlinien wie zB HIPAA (Health Insurance Portability and Accountability Act von 1996 ) (2*)

Nachteile:

  1. Schränkt den rechtmäßigen Zugang zu bestimmten Bereichen der Website für bestimmte Nutzer/innen ein, die ihn für ihre Arbeit benötigen. Je nach Setup kannst du dieses aber auch vernachlässigen – es kommt immer auch darauf an, wie viele Menschen an deiner Website arbeiten (und damit ggfs. Zugriff auf diese Datei benötigen)
  2. Kann bei komplexen Websites mit mehreren Plugins und Themes zeitaufwändig sein, oder wenn die wp-config-Datei aufgrund von Geschäftsanforderungen oder Updates häufig geändert werden muss.
  3. Kann zu zusätzlichen Serverkosten führen, da die zusätzlichen Schutzmaßnahmen für die wp-config-Datei zu einer erhöhten Ressourcenauslastung führen.
  4. Erfordert ständige Wartung, damit nur autorisierte Benutzer darauf zugreifen können.

Wie schützt man die wp-config.php und wie sichert man seine sensiblen Daten?

Als Website-Betreiber bist du dafür verantwortlich, dass die auf deiner Website gespeicherten Daten sicher sind. Eine der wichtigsten Bereiche, die es zu schützen gilt, ist der Zugriff auf deine Datenbank, aber auch der Zugriff auf dein WordPress Backend. In diesem Artikel zeigen wir dir, wie du die Datei wp-config.php schützen kannst und wie du deine sensiblen Daten sichern kannst. Außerdem geben wir dir einige Tipps, wie du deine Website am besten vor bösartigen Angriffen und Hackern schützen kannst. Wenn du die in diesem Artikel beschriebenen Schritte befolgst, kannst du sicherstellen, dass deine Website so sicher wie möglich ist und dass deine Daten vor neugierigen Blicken geschützt sind.

Was ist die wp-config.php Datei?

WordPress ist eines der beliebtesten Content Management Systeme der Welt. Es wird von Millionen von Menschen auf der ganzen Welt genutzt, um ihre Websites zu erstellen und zu verwalten. Die Datei wp-config.php ist ein wesentlicher Bestandteil jeder WordPress-Installation, da sie die wichtigen Informationen speichert, die dir den Zugriff auf deine Website ermöglichen. Gerade weil die Datei solch wichtige Informationen zu deiner Website bereit hält, ist sie ein beliebtes Ziel für Angreifer. Sie enthält neben den Informationen zu deiner Datenbank auch Informationen wie zum Beispiel die Authentifizierungsschlüssel und Debug-Optionen.

Die wp-config.php Datei befindet sich standardmäßig im Stammverzeichnis der WordPress-Installation. Die Datei wird in WordPress mithilfe der require_once()-Funktion in der wp-load.php Datei eingebunden, die bei jedem Seitenaufruf der WordPress-Site geladen wird.

Der relevante Code in wp-settings.php, der wp-config.php einbindet, sieht wie folgt aus:

// Lade die WordPress-Konfigurationsdatei
require_once( ABSPATH . 'wp-config.php' );

Die require_once() Funktion ist eine PHP-Funktion, die eine angegebene Datei einbindet und sicherstellt, dass die Datei nur einmal eingebunden wird, auch wenn die Funktion mehrmals aufgerufen wird.

Durch das Einbinden von wp-config.php in wp-settings.php kann WordPress auf die in wp-config.php definierten Konfigurationseinstellungen auf jedem Seitenaufruf zugreifen. Das ermöglicht zum Beispiel die Verbindung zur Datenbank und andere wichtige Aufgaben.

Es ist zu beachten, dass der Speicherort von wp-config.php mithilfe der WP_CONFIG_PATH Konstante in der Serverumgebung angepasst werden kann. Dies ermöglicht es Entwicklern, die Datei aus Sicherheits- oder organisatorischen Gründen an einen anderen Ort zu verschieben.

Im folgenden schauen wir uns ein paar Möglichkeiten an, wie du die Datei nun genau schützen kannst.

Schutz der wp-config.php über die .htaccess-Datei

  • Verbinde dich mit einem FTP-Client mit deiner Website und lade die .htaccess-Datei herunter, die sich im Stammverzeichnis deiner Website befindet. Es ist wichtig, dass du SFTP oder explizites FTP über TLS verwendest, um die Kommunikation zwischen deinem Computer und deinen Servern zu verschlüsseln.
  • Öffne die .htaccess-Datei mit einem Texteditor wie z.B. Notepad oder Visual Studio Code.
  • Kopiere den folgenden Text in deine .htaccess-Datei, um den Zugriff auf deine wp-config.php-Datei zu verweigern. Du kannst den folgenden Text unten in deine .htaccess-Datei kopieren.
# protect wpconfig.php
<files wp-config.php>
Require all denied
</files>

Solltest du eine ältere Version von Apache nutzen (vor 2.4), dann sieht dein Code etwas anders aus:

# protect wpconfig.php
<files wp-config.php>
order allow, deny
deny from all
</files>

Statt mit FTP und einem Editor kannst du die Datei auch per Kommandozeile bearbeiten, wie Terminal oder Putty.

Es ist eine gute Idee, deine wp-config.php-Datei vor unbefugtem Zugriff zu schützen, indem du sie in deine .htaccess-Datei aufnimmst. So verhinderst du, dass Unbefugte auf deine wp-config.php-Datei zugreifen können, und stellst sicher, dass nur du oder andere Personen, denen du den Zugriff erlaubst, darauf zugreifen können. Auf diese Weise kannst du sicherstellen, dass deine WordPress-Installation sicherer ist.

Sensible Informationen aus der wp-config.php entfernen

Erstelle eine neue config.php Datei

Erstelle eine neue PHP-Datei, zum Beispiel config.php. Diese Datei sollte natürlich außerhalb deines öffentlichen Verzeichnisses liegen, also in einem Verzeichnis, auf das du nicht per Webbrowser zugreifen kannst.

Befindet sich deine Website zum Beispiel im Verzeichnis /var/www/clients/deinuser/public, dann erstelle die Datei zum Beispiel in /var/www/clients/deinuser/. Damit ist die Datei eigentlich nicht mehr erreichbar.

Öffne die bestehende WordPress-Datei wp-config.php und verschiebe die Zeilen mit den Datenbankverbindungsdaten, dem Datenbankpräfix und den WordPress-Sicherheitsschlüsseln aus der wp-config.php-Datei in die neue config.php-Datei, wie im folgenden Beispiel gezeigt. Füge <?php am Anfang der Datei ein. Dieser Schritt ist wichtig, damit du diese Datei auch per PHP nutzen kannst. Danach sollte deine confog.php etwa so aussehen (mit deinen Zugangsdaten und Passwörtern natürlich):

<?php



// ** Datenbank-Einstellungen - Diese Zugangsdaten bekommst du von deinem Webhoster. ** //
/**
 * Ersetze datenbankname_hier_einfuegen
 * mit dem Namen der Datenbank, die du verwenden möchtest.
 */
define( 'DB_NAME', 'DEINE_DATENBANK' );

/**
 * Ersetze benutzername_hier_einfuegen
 * mit deinem Datenbank-Benutzernamen.
 */
define( 'DB_USER', 'DEIN_DATENBANKNUTZER' );

/**
 * Ersetze passwort_hier_einfuegen mit deinem Datenbank-Passwort.
 */
define( 'DB_PASSWORD', 'DEIN_PASSWORT_ZUR_DATENBANK' );

/**
 * Ersetze localhost mit der Datenbank-Serveradresse.
 */
define( 'DB_HOST', 'localhost' );

/**
 * Der Datenbankzeichensatz, der beim Erstellen der
 * Datenbanktabellen verwendet werden soll
 */
define( 'DB_CHARSET', 'utf8mb4' );

/**
 * Der Collate-Type sollte nicht geändert werden.
 */
define( 'DB_COLLATE', '' );

/**#@+
 * Sicherheitsschlüssel
 *
 * Ändere jeden untenstehenden Platzhaltertext in eine beliebige,
 * möglichst einmalig genutzte Zeichenkette.
 * Auf der Seite {@link https://api.wordpress.org/secret-key/1.1/salt/ WordPress.org secret-key service}
 * kannst du dir alle Schlüssel generieren lassen.
 *
 * Du kannst die Schlüssel jederzeit wieder ändern, alle angemeldeten
 * Benutzer müssen sich danach erneut anmelden.
 *
 * @since 2.6.0
 */
define( 'AUTH_KEY',         'HIER_DEIN_SCHLUESSEL' );
define( 'SECURE_AUTH_KEY',  'HIER_DEIN_SCHLUESSEL' );
define( 'LOGGED_IN_KEY',    'HIER_DEIN_SCHLUESSEL' );
define( 'NONCE_KEY',        'HIER_DEIN_SCHLUESSEL' );
define( 'AUTH_SALT',        'HIER_DEIN_SCHLUESSEL' );
define( 'SECURE_AUTH_SALT', 'HIER_DEIN_SCHLUESSEL' );
define( 'LOGGED_IN_SALT',   'HIER_DEIN_SCHLUESSEL' );
define( 'NONCE_SALT',       'HIER_DEIN_SCHLUESSEL' );

/**#@-*/

/**
 * WordPress Datenbanktabellen-Präfix
 *
 * Wenn du verschiedene Präfixe benutzt, kannst du innerhalb einer Datenbank
 * verschiedene WordPress-Installationen betreiben.
 * Bitte verwende nur Zahlen, Buchstaben und Unterstriche!
 */
$table_prefix = 'DEIN_DATENBANK_PREFIX_';

Nachdem du diese Inhalte aus der wp-config.php herausgeschnitten hast und diese in die config.php übertragen hast, musst du nun noch deiner WordPressinstallation mitteilen, wo diese wichtigen Daten nun zu finden sind.

Also ersetzt du nun den sensiblen Inhalt mit dem Pfad zu deiner neuen config.php Datei. Das Ergebnis sieht dann in etwa so aus:

<?php

// include ('/var/www/clients/deinuser/config.php');
require_once  ('/var/www/clients/deinuser/config.php');


/**
 * Grundeinstellungen für WordPress
 *
 * Diese Datei wird zur Erstellung der wp-config.php verwendet.
 * Du musst aber dafür nicht das Installationsskript verwenden.
 * Stattdessen kannst du auch diese Datei als „wp-config.php“ mit
 * deinen Zugangsdaten für die Datenbank abspeichern.
 *
 * Diese Datei beinhaltet diese Einstellungen:
 *
 * * Datenbank-Zugangsdaten,
 * * Tabellenpräfix,
 * * Sicherheitsschlüssel
 * * und ABSPATH.
 *
 * @link https://wordpress.org/support/article/editing-wp-config-php/
 *
 * @package WordPress
 */



/** Ab hier ist der Code in der Inlcude */


/**
 * Für Entwickler: Der WordPress-Debug-Modus.

Vielleicht sind die heir zwei Dinge ausgefallen – ich habe zum Einen folgenden Pfad ergänzt:

...
require_once  ('/var/www/clients/deinuser/config.php');
...

Ich habe die Datei eingebunden mit require_once. Da die wp-config.php allerdings eh nur einmal geladen wird, kannst du auch include nutzen.

Außerdem habe ich zum anderen ergänzt:

...
/** Ab hier ist der Code in der Inlcude */
...

Dieser Kommentar gilt nur für mich als Hinweis, was ich hier gemacht habe – oder im Fall der Fälle, dass jemand anderes mal an der entsprechenden Seite arbeiten will – zum Beispiel dein Webmaster.

Der Unterschied von Require vs. Include

Es gibt die Möglichkeit in PHP Dateien entweder mit include oder mit require einzubinden – oder auch mit include_once oder require_once.

Das sieht zunächst etwas verwirrend aus, deshalb hier eine kurze Übersicht:

  • Wann sollte ich require vs. include verwenden?
  • Wann sollte ich require_once vs. require verwenden?

Die require()-Funktion ist identisch mit include(), nur dass sie Fehler anders behandelt. Wenn ein Fehler auftritt, gibt die include()-Funktion eine Warnung aus, aber das Skript wird weiter ausgeführt. Die require()-Funktion erzeugt einen schwerwiegenden Fehler und das Skript wird angehalten.

Die Anweisung require_once() ist identisch mit require(), mit dem Unterschied, dass PHP prüft, ob die Datei bereits eingebunden wurde, und wenn ja, sie nicht erneut einbindet (require).

Vergleichen kannst du er HIER oder HIER.

Die open_basedir Problematik in WordPress

Um zum Beispiel Konfigurationsdateien einer PHP Installation vor allzu neugierigen Blicken zu schützen, kann es ratsam sein, eben diese sensitiven Daten außerhalb des Dokumenten-Roots abzulegen. Damit ein Skript auf diese ausgelagerten Daten zugreifen kann, bedarf es der PHP.ini Direktive open_basedir.

Wenn du deine onfig.php Datei nun außerhalb deines öffentlichen Verzeichnisses abgelegt hast, dann kann es sein, dass du einen Fehler bekommst, nämlich open_basedir restriction in effect. Sollte das der Fall sein, musst du einfach deine Einstellungen anpassen.

In Kurzform passiert nämlich folgendes: Die Direktive open_basedir beschränkt den Zugriff auf Dateien auf einen bestimmten Ordner, der von PHP geöffnet wird, einschließlich aller darin enthaltenen Unterordner. Diese Direktive ist jedes Mal wirksam, egal ob der abgesicherte Modus aktiviert ist oder nicht. Wenn ein PHP-Skript versucht, eine Datei zu öffnen, wird der Speicherort der Datei überprüft, um zu sehen, ob sie sich im Verzeichnisbaum in der open_basedir-Deklaration befindet. Wenn nicht, öffnet PHP die Datei nicht.

Im Regelfall kannst du die Einstellung in deinem Web-Verwaltungspanel vornehmen – ich nutze zum Beispiel ISPConfig, und dort finde ich für die entsprechende Website unter den Optionen die Einstellungen für PHP open_basedir – sollte mein Dateipfad also noch nicht aufgeführt sein, ergänze ich ihn einfach.

Je nach Verwaltungspanel, welches du nutzt, sieht dies bei dir natürlich anders aus.

Einrichten der richtigen Dateiberechtigungen, um die wp-config.php zu schützen

Die wp-config ist eine der sensibelsten Dateien im gesamten Verzeichnis, da sie alle Informationen zur Basiskonfiguration und auch die Datenbankverbindungsinformationen enthält. Die entsprechende Dateiberechtigung für diese Datei ist 400.

Das bedeutet, dass der Benutzer und die Gruppen nur die Berechtigung zum Lesen haben und andere nicht auf die Datei zugreifen können. Dateiberechtigungen sind also eine zusätzliche Methode, um deine wp-config.php zu schützen.

Du kannst diese Dateiberechtigungen mit deinem FTP Programm setzen, oder auch per Terminal/Kommandozeile. Zusätzlich setze ich diese Einstellungen nicht nur für die wp-config.php Datei, sondern gleichzeitig auch noch für meine neue config.php.

Beides hat am Ende den Vorteil, dass selbst ich als Admin nicht ohne weiteres eine dieser Dateien ändern kann. Um hier anzupassen, muss ich zunächst die Rechte wieder zurück setzen. Allerdings hindert es mich auch daran, eine dieser Dateien einfach zu überschreiben.

wp-config.php mit Firewall schützen

Eine weitere Methode, die wp-confog.php zu schützen – und nicht nur diese Datei, sondern deine gesamte WordPressinstallation – ist das Einrichten einer Firewall.

Eine Firewall kann helfen, eine WordPress-Website vor Angriffen zu schützen, indem sie den Datenverkehr überwacht und unerwünschten Datenverkehr blockiert. Eine Firewall kann auch dazu beitragen, den Zugriff auf die Website zu beschränken und Sicherheitsrisiken zu minimieren. Hier sind einige Schritte, die du unternehmen kannst, um deine WordPress-Website mit einer Firewall zu schützen:

  • Verwende eine Web Application Firewall (WAF): Eine WAF kann dabei helfen, Angriffe auf deine WordPress-Website abzuwehren, indem sie bösartigen Datenverkehr erkennt und blockiert. Es gibt viele kommerzielle und kostenlose WAFs für WordPress. Zu den beliebtesten Optionen gehören Sucuri und Cloudflare.
  • Verwende eine Firewall auf dem Server: Eine Firewall auf dem Server kann helfen, den Zugriff auf deine WordPress-Website einzuschränken. Eine solche Firewall kann zum Beispiel den eingehenden Datenverkehr auf bestimmte Ports beschränken oder den Zugriff auf bestimmte IP-Adressen oder Netzwerke blockieren. Auf Linux-Systemen ist die UFW-Firewall eine häufig verwendete Option.
  • Nutze eine Plugin-Firewall: Es gibt auch WordPress-Plugins, die als Firewall fungieren können. Ein Beispiel für eine solche Firewall ist das iThemes Security Plugin. Eine Plugin-Firewall kann dabei helfen, Angriffe auf deine Website zu blockieren und schützt außerdem vor möglichen Sicherheitsrisiken durch unsichere Plugins oder veraltete WordPress-Versionen.
  • Eine weitere viel genutzte und auch kostenfrei erhältliche Firewall ist die Firewall von Wordfence. Der Vorteil bei der Wordfence Firewall ist, dass diese so eingestellt werden kann, dass sie vor allen anderen WordPress Dateien geladen wird. Dadurch kannst du sicherstellen, dass eventuell schadhafter Code in deinen Plugins nicht bereits geladen wird. Wordfence Firewall kannst du über das Pluginverzeichnis von WordPress installieren. Es gibt auch eine kostenpflichtige Version, die dich noch besser schützt.

Der Einsatz einer Firewall ist wichtig, um die Sicherheit deiner WordPress-Website zu erhöhen, da sie Angriffe blockieren und unerwünschten Datenverkehr verhindern kann. Ein ungeschütztes WordPress-System kann leicht zum Ziel von Angriffen werden und möglicherweise gehackt werden, was zu Datendiebstahl oder Beschädigung der Website führen kann. Durch den Einsatz einer Firewall kannst du potenzielle Sicherheitsbedrohungen verringern und deine Website sicherer machen.

Zusammenfassung: die wp-config.php schützen

Fassen wir noch einmal zusammen, welche Schritte du unternehmen kannst, um deine wp-confog.php zu schützen und deine Website sicherer zu machen:

  • Sichere den Zugang zur wp-config.php ab durch Änderung deiner .htaccess-Datei
  • Lagere kristische Informationen aus der wp-config.php aus, um deine Daten zu schützen
  • Erstelle eine externe config.php Datei (der Name ist egal) und speichere hier die sensible Informationen ab
  • Sorge für open_basedir Zugriff auf diese Datei, falls nötig
  • Ändere die Dateiberechtigungen auf 400 für sowohl deine wp-config.php wie auch deine neue config.php Datei, um mehr Schutz zu haben
  • Installiere dir eine Firewall auf deinem Server
  • nutze ggfs. Cloudflare zur Absicherung
  • Installiere dir eine Firewall direkt in WordPress, zum Beispiel Wordfence

Klingt vielleicht nach viel Aufwand? Ja, das mag sein, aber was wiegt schlimmer? Einmal etwas Aufwand betreiben und kritische Dateien wie deine wp-config.php Datei schützen, oder aber tief in die Röhre schauen, wenn deine Seite gehackt wurde?

Gerade bei kritischen Dateien und Informationen würde ich empfehlen, ein besonderes Augenmerk daruaf zu legen, genau diese Dateien zu schützen.


(1*) GDPR – Die Allgemeine Datenschutz-Verordnung (General Data Protection Regulation GDPR) ist der neue rechtliche Rahmen der Europäischen Union, der festlegt, wie personenbezogene Daten gesammelt und verarbeitet werden dürfen.

(2*) Health Insurance Portability and Accountability Act von 1996 

Die HIPAA-Regulations wurden in erster Linie erlassen, um:

  • den Informationsfluss im Gesundheitswesen zu modernisieren.
  • festzulegen, wie persönlich identifizierbare Informationen (PII), die von der Gesundheits- und Krankenversicherungsbranche verwaltet werden, vor Betrug und Diebstahl geschützt werden sollten.
  • Beschränkungen des Krankenversicherungsschutzes ansprechen, wie z. B. die Übertragbarkeit und der Schutz von Personen mit Vorerkrankungen.

Der HIPAA legt nationale Standards fest, um zu verhindern, dass sensible Gesundheitsinformationen von Patienten ohne deren Wissen oder Zustimmung weitergegeben werden. Das U.S. Department of Health and Human Services (HHS) hat zur Umsetzung dieses Mandats die HIPAA Privacy Rule erlassen.

Weitere Beiträge

Fehler in der php.ini

Php übernimmt Einstellungen nicht?

Reading Time: 1:37 min

Hast du deine Einstellungen in der php.ini geändert, aber diese wollen partout nicht übernommen werden? Eventuell hast du einen Fehler in der php.ini WordPress benötigt höhere Upload Limits In der…

Zum Beitrag
Shared Hosting vs. Dedicated Server

Hosting: Shared vs eigener Server

Reading Time: 16:17 min

Shared Hosting und eigene Server unterscheiden sich in vielen Aspekten grundlegend voneinander. Beim Shared Hosting teilen sich mehrere Websites die Ressourcen eines Servers, was zu niedrigeren Kosten führt, aber auch…

Zum Beitrag
Designer vs Developer - wo sind die Unterschiede

Web Designer vs. Web Developer: Die Unterschiede verstehen

Reading Time: 9:11 min

Webdesigner/innen und Webentwickler/innen spielen bei der Erstellung von Websites unterschiedliche, aber sich ergänzende Rollen. Webdesigner/innen konzentrieren sich auf die visuellen Aspekte, einschließlich Layout, Farbgestaltung und Typografie.

Zum Beitrag

Hinterlasse einen Kommentar