6. August 2026

Sechs Zeilen wp-config.php, die auf jeder Installation stehen sollten

Kein Plugin, keine Firewall — nur sechs Konstanten in der wp-config.php. Sie schließen die Wege, die bei fast jedem gehackten WordPress benutzt wurden, das bei mir auf dem Tisch lag.

Wenn eine gehackte WordPress-Installation bei mir landet, ist der Einstieg selten spektakulär. Meistens war es ein veraltetes Plugin, ein geratenes Passwort — und danach der Datei-Editor im Backend, mit dem sich der Angreifer bequem seinen Loader ins Theme geschrieben hat.

Gegen den ersten Teil hilft Wartung. Gegen den zweiten helfen sechs Zeilen, die nichts kosten und nichts kaputt machen.

Getestet mit

  • WordPress 6.8
  • PHP 8.3
  • Apache und nginx, beides unauffällig

Wohin die Zeilen gehören

In die wp-config.php, oberhalb dieser Zeile:

/* That's all, stop editing! Happy publishing. */

Alles, was darunter steht, wird nicht mehr zuverlässig ausgewertet. Das ist der häufigste Grund, warum jemand schwört, die Konstante gesetzt zu haben, und sie trotzdem wirkungslos ist.

Die sechs Zeilen

define( 'DISALLOW_FILE_EDIT', true );
define( 'DISALLOW_FILE_MODS', true );
define( 'FORCE_SSL_ADMIN', true );
define( 'WP_AUTO_UPDATE_CORE', 'minor' );
define( 'WP_DEBUG', false );
define( 'WP_DEBUG_DISPLAY', false );

Was sie einzeln tun

DISALLOW_FILE_EDIT entfernt den Theme- und Plugin-Editor aus dem Backend. Wer sich Zugang zu einem Admin-Konto verschafft hat, kann damit nicht mehr direkt PHP schreiben. Das ist die wirksamste einzelne Zeile der Liste.

DISALLOW_FILE_MODS geht weiter und verbietet zusätzlich Installation und Update von Plugins und Themes über das Backend. Achtung: Damit sperrst du auch dich selbst aus. Sinnvoll nur, wenn du über WP-CLI oder ein Deployment arbeitest.

FORCE_SSL_ADMIN erzwingt HTTPS für Login und Backend. Ohne die Zeile kann ein Aufruf über HTTP das Session-Cookie im Klartext übertragen.

WP_AUTO_UPDATE_CORE mit dem Wert 'minor' holt Sicherheitsupdates automatisch, lässt große Versionssprünge aber bei dir. Das ist der Kompromiss, mit dem ich bei Kundenseiten gut fahre.

WP_DEBUG und WP_DEBUG_DISPLAY auf false verhindern, dass PHP-Fehler im Frontend erscheinen. Eine Fehlermeldung mit vollem Serverpfad ist für einen Angreifer eine kostenlose Landkarte.

Die Zeile, die zwei Wochen lang Updates verhindert hat

Auf einer Kundenseite habe ich DISALLOW_FILE_MODS gesetzt und dabei nicht bedacht, dass dort ein automatisches Update-Plugin lief. Das Plugin meldete weiter brav „Updates erfolgreich installiert“. Angefasst hatte es keine einzige Datei, weil WordPress alle Schreibvorgänge stillschweigend abwies.

Gemerkt habe ich es beim Wartungsbericht, als die Versionsnummern seit zwei Wochen identisch waren. Kontrolliert habe ich es so:

wp plugin list --update=available --path=/PFAD/ZUR/INSTALLATION
wp eval 'var_dump( defined("DISALLOW_FILE_MODS") && DISALLOW_FILE_MODS );' --path=/PFAD/ZUR/INSTALLATION

Seitdem setze ich DISALLOW_FILE_MODS nur noch dort, wo Updates über die Kommandozeile oder ein Deployment laufen. Auf einer Seite, die sich selbst aktualisieren soll, richtet die Zeile mehr Schaden an als der Datei-Editor, den sie schützt — du wiegst dich in Sicherheit, während die Installation veraltet.

Zwei Zeilen, die oft empfohlen werden und die ich nicht setze

DISALLOW_UNFILTERED_HTML klingt gut, bricht aber in der Praxis Formular-Plugins und Einbettungen. Wenn du es setzt, teste die Formulare danach wirklich durch.

Das Verschieben oder Umbenennen der wp-config.php bringt sicherheitstechnisch wenig und macht jedes Deployment und jede Fremdübernahme unnötig kompliziert. Aufwand und Nutzen stehen nicht im Verhältnis.

Kontrolle

wp eval 'foreach ( ["DISALLOW_FILE_EDIT","FORCE_SSL_ADMIN","WP_DEBUG"] as $c ) { printf( "%s = %sn", $c, defined($c) ? var_export(constant($c), true) : "nicht gesetzt" ); }' --path=/PFAD/ZUR/INSTALLATION

Ohne WP-CLI reicht der Blick ins Backend: Unter Design und Plugins darf kein Menüpunkt „Editor“ mehr auftauchen.

Häufige Fehler

Ich habe die Zeilen gesetzt, der Editor ist trotzdem da.
Fast immer stehen sie unterhalb von „That’s all, stop editing“. Verschieb sie nach oben.

Ersetzen diese Zeilen ein Sicherheits-Plugin?
Nein. Sie schließen einen bestimmten Weg nach dem Einbruch. Gegen den Einbruch selbst helfen aktuelle Software, gute Passwörter und Zwei-Faktor-Anmeldung.

Was ist mit XML-RPC?
Das lässt sich nicht in der wp-config.php abschalten, sondern gehört auf Serverebene oder über einen Filter erledigt. Eigenes Thema, eigener Beitrag.

Falls du nicht weiterkommst

Ich mache das beruflich. Schreib mir kurz, worum es geht — ich sag dir ehrlich, ob ich helfen kann.
Zu purin.at
← Alle Beiträge