Der Datei-Editor im Backend ist für Angreifer eine der bequemsten Abkürzungen zur Code-Ausführung. Ein Administrator-Account in WordPress ist standardmässig gleichbedeutend mit Code-Ausführung auf dem Server: über den Theme-/Plugin-Editor oder durch das Hochladen eines beliebigen Plugins als ZIP. Zwei Konstanten schränken das ein.
DISALLOW_FILE_EDIT
define( 'DISALLOW_FILE_EDIT', true );
- Entfernt den Theme-Datei-Editor und den Plugin-Datei-Editor aus dem Backend.
- Entzieht allen Benutzern die Capabilities
edit_themes,edit_pluginsundedit_files. - Keine Nebenwirkungen auf Updates. Sollte auf jeder Produktions-Site gesetzt sein.
Hinweis: Bei Block-Themes ist der klassische Theme-Editor ohnehin weitgehend durch den Site Editor ersetzt; die Konstante bleibt trotzdem sinnvoll, weil sie auch den Plugin-Editor deaktiviert.
DISALLOW_FILE_MODS
define( 'DISALLOW_FILE_MODS', true );
- Verhindert Installation, Update und Löschen von Plugins und Themes über das Backend, ebenso Core-Updates und Sprachpaket-Updates.
- Impliziert
DISALLOW_FILE_EDIT. - Schaltet automatische Updates ab, deshalb braucht es einen alternativen Update-Prozess.
Geeignet, wenn Code per Git/Composer/CI ausgerollt wird oder Updates zuverlässig per WP-CLI-Cronjob laufen. Nicht geeignet, wenn niemand Updates ausserhalb des Backends einspielt; dann wird die Site schnell veraltet und unsicherer als vorher.
Kompromiss: Umgebungsabhängig setzen
if ( 'production' === getenv( 'WP_ENVIRONMENT_TYPE' ) ) {
define( 'DISALLOW_FILE_MODS', true );
}
Updates werden auf Staging getestet und per Deployment oder WP-CLI in Produktion übertragen:
wp @prod plugin update --all --exclude=woocommerce
wp @prod core update --minor
Weitere Einschränkungen für Admins
DISALLOW_UNFILTERED_HTML: kein JavaScript in Inhalten.- Rolle „Administrator“ nur wenigen geben; für Kunden eine angepasste Rolle ohne
install_plugins,activate_plugins,edit_usersundpromote_users. WP_HTTP_BLOCK_EXTERNALmitWP_ACCESSIBLE_HOSTS, damit Plugins nicht unkontrolliert Daten nach aussen senden.
Grenzen
Diese Konstanten verhindern Code-Ausführung über reguläre Admin-Funktionen. Gegen Schwachstellen in Plugins, die beliebige Dateien schreiben, helfen sie nur zusammen mit restriktiven Dateirechten (siehe Dateiberechtigungen und Eigentümer richtig setzen).
Weiterführende Artikel
- wp-config.php im Detail: Konstanten, die man kennen sollte
- Dateiberechtigungen und Eigentümer richtig setzen
- Staging-Umgebungen und Deployment-Workflows