Het bestand wp-config.php in de hoofdmap van elke WordPress installatie bevat de databasegegevens (host, naam, gebruiker, wachtwoord), de geheime security keys en salts en centrale configuratieconstanten. Belandt dit bestand in verkeerde handen, dan is vrijwel de hele website gecompromitteerd. Het is daarom het belangrijkste afzonderlijke bestand om te beveiligen. Deze gids toont vier verhardingsmaatregelen: verse security keys genereren, restrictieve bestandsrechten instellen, directe HTTP toegang tot het bestand blokkeren en beschermende constanten zoals DISALLOW_FILE_EDIT toevoegen. Optioneel kan het bestand een niveau boven de webroot worden verplaatst. Alle stappen zijn in ongeveer 20 minuten uit te voeren via SFTP/SSH en de .htaccess of nginx configuratie.
Stap 1: Security keys en salts vernieuwen
WordPress gebruikt acht geheime tekenreeksen (AUTH_KEY, SECURE_AUTH_KEY, LOGGED_IN_KEY, NONCE_KEY en de vier bijbehorende _SALT waarden) om login cookies en nonces te versleutelen. Waren deze waarden ooit openbaar (bijvoorbeeld in een back-up die op het web stond) of zijn ze nooit gewijzigd, dan zou je ze moeten vernieuwen. WordPress biedt hiervoor een officiële generator:
# Fetch current random values:
https://api.wordpress.org/secret-key/1.1/salt/Vervang in wp-config.php het bestaande blok door de vers gegenereerde waarden:
define( 'AUTH_KEY', 'hier-langer-zufallswert' );
define( 'SECURE_AUTH_KEY', 'hier-langer-zufallswert' );
define( 'LOGGED_IN_KEY', 'hier-langer-zufallswert' );
define( 'NONCE_KEY', 'hier-langer-zufallswert' );
define( 'AUTH_SALT', 'hier-langer-zufallswert' );
define( 'SECURE_AUTH_SALT', 'hier-langer-zufallswert' );
define( 'LOGGED_IN_SALT', 'hier-langer-zufallswert' );
define( 'NONCE_SALT', 'hier-langer-zufallswert' );Na het opslaan worden alle ingelogde gebruikers uitgelogd – dat is gewenst en een effectieve manier om gestolen sessies ongeldig te maken.
Stap 2: Bestandsrechten instellen
wp-config.php moet leesbaar zijn voor de webserver, maar ontoegankelijk voor andere gebruikers. Aanbevolen is 600 (alleen de eigenaar mag lezen/schrijven) of 640 als de webservergroep leestoegang nodig heeft:
# Only owner reads and writes
chmod 600 wp-config.php
# Alternatively, if the web server group must read
chmod 640 wp-config.phpZet nooit 777 of 666 – daarmee kan elke gebruiker op het systeem het bestand lezen en de databasegegevens uitlezen.
Stap 3: Directe HTTP toegang blokkeren
Normaal wordt wp-config.php als PHP uitgevoerd en levert het geen uitvoer. Valt de PHP verwerking echter weg (misconfiguratie, serververhuizing), dan kan de platte tekst worden uitgeleverd. Blokkeer de directe toegang aanvullend op webserverniveau.
Apache (.htaccess)
<Files wp-config.php>
Require all denied
</Files>nginx
location = /wp-config.php {
deny all;
return 403;
}Stap 4: Verhardingsconstanten toevoegen
Voeg in wp-config.php boven de regel /* That's all, stop editing! */ de volgende constanten toe:
// Disable the file editor in the admin area (prevents editing
// theme and plugin code via wp-admin)
define( 'DISALLOW_FILE_EDIT', true );
// Optional: completely prevent installing/updating plugins and
// themes via the dashboard (strictest variant)
// define( 'DISALLOW_FILE_MODS', true );
// Disable debug output in production
define( 'WP_DEBUG', false );
define( 'WP_DEBUG_DISPLAY', false );
// Enforce encrypted connections in the admin area only
define( 'FORCE_SSL_ADMIN', true );
// Limit automatic core updates to security releases
define( 'WP_AUTO_UPDATE_CORE', 'minor' );DISALLOW_FILE_EDIT is bijzonder belangrijk: zonder deze constante kan een aanvaller die een beheerdersaccount overneemt direct via Weergave » Thema editor willekeurige PHP code uitvoeren.
Optioneel: wp-config.php buiten de webroot verplaatsen
WordPress zoekt wp-config.php ook een mapniveau boven de webroot. Staat je WordPress onder /var/www/html/, dan kun je het bestand verplaatsen naar /var/www/wp-config.php. Zo staat het buiten het via HTTP bereikbare gebied.
Let op: Dit werkt alleen betrouwbaar bij klassieke single site setups met een eigen webroot. Bij shared hosting, waar meerdere sites hetzelfde bovenliggende niveau delen, kan verplaatsen conflicten geven. Overleg bij twijfel met je host.
Hoe controleer ik of de beveiliging werkt?
- Open
https://jouw-domein.nl/wp-config.phpin de browser. Verwacht: een lege pagina (PHP uitvoering) of 403 Forbidden (toegang geblokkeerd) – nooit leesbare PHP broncode. - Via de terminal:
curl -s -o /dev/null -w "%{http_code}\n" https://your-domain.com/wp-config.php # Expected: 403 (with an active block) or 200 with an empty body - Rechten controleren:
ls -l wp-config.php # Expected: -rw------- (600) or -rw-r----- (640) - Controleer in het beheergedeelte dat er onder Weergave en Plugins geen editor meer verschijnt (effect van DISALLOW_FILE_EDIT).
Veelgemaakte fouten
- Te strenge rechten: Bij sommige hosts draait PHP niet als bestandseigenaar. Dan kan
600tot een 500 fout leiden – gebruik in dat geval640of644. - Keys vervangen zonder back-up: Maak vóór wijzigingen een kopie van het bestand. Een typefout in de constanten legt de site plat.
- DISALLOW_FILE_MODS te vroeg: Deze constante blokkeert ook reguliere plugin/thema updates via het dashboard. Zet hem alleen als updates uitsluitend via deployment/WP-CLI lopen.
- Bestand verplaatst, maar pad fout: Knutsel bij het verplaatsen buiten de webroot geen eigen
requireloader die een absoluut serverpad blootlegt.
Veelgestelde vragen (FAQ)
Welk bestandsrecht moet wp-config.php hebben?
600 wordt aanbevolen (alleen de eigenaar mag lezen en schrijven). Draait PHP bij jouw host niet als bestandseigenaar maar via de groep, gebruik dan 640. Zet nooit 777 of 666, want dan kan elke gebruiker op de server de databasegegevens uitlezen.
Wat gebeurt er als ik de security keys in wp-config.php wijzig?
Alle ingelogde gebruikers worden uitgelogd en moeten opnieuw inloggen. Dat is gewenst en een effectieve manier om gestolen sessiecookies ongeldig te maken. De inhoud van de site blijft ongewijzigd. Genereer verse waarden via de officiële WordPress secret key generator.
Waar dient de constante DISALLOW_FILE_EDIT voor?
DISALLOW_FILE_EDIT schakelt de thema en plugin editor in het WordPress beheergedeelte uit. Zonder deze constante kan een aanvaller die een beheerdersaccount overneemt direct via Weergave » Thema editor willekeurige PHP code uitvoeren. De constante is daarmee een van de belangrijkste verhardingsmaatregelen.
Moet ik wp-config.php buiten de webroot verplaatsen?
WordPress zoekt wp-config.php ook een mapniveau boven de webroot. Bij klassieke single site setups met een eigen webroot verhoogt verplaatsen de veiligheid. Bij shared hosting, waar meerdere sites hetzelfde bovenliggende niveau delen, kan het conflicten geven – overleg bij twijfel met je host.
Hoe helpt InspectWP bij wp-config.php?
Tijdens de crawl controleert InspectWP onder meer of gevoelige bestanden zoals wp-config.php of een wp-config.php.bak back-up openbaar bereikbaar zijn, of het beheergedeelte via HTTPS wordt afgedwongen en of debug uitvoer naar buiten lekt. Bijbehorende bevindingen worden in het rapport als beveiligingsrisico gemarkeerd.