Wat is wp-config.php?
Het wp-config.php bestand is een van de belangrijkste bestanden in je WordPress installatie. Het bevat de configuratie-instellingen die WordPress nodig heeft om te functioneren, waaronder:
- Database verbindingsgegevens (naam, gebruiker, wachtwoord, host)
- Authentication Keys en Salts voor sessiebeveiliging
- De tabel prefix voor je database
- Debug instellingen
- Diverse security en performance opties
Dit bestand bevindt zich in de root van je WordPress installatie en wordt als eerste geladen wanneer WordPress opstart. Daarom is het cruciaal dat dit bestand goed beveiligd is.
Kenmerken van wp-config.php:
- Centrale configuratie: Alle belangrijke instellingen op een plek
- Eerste laadpunt: Wordt geladen voor alle andere WordPress code
- Niet overschrijfbaar: WordPress updates raken dit bestand niet aan
- Gevoelige data: Bevat database credentials en secret keys
Waarom is wp-config.php zo belangrijk?
Als een aanvaller toegang krijgt tot je wp-config.php bestand, heeft hij direct toegang tot:
- Je database: Alle content, gebruikers en wachtwoorden
- Authentication keys: Waarmee sessies kunnen worden gekaapt
- Server informatie: Hostnames en potentieel andere systemen
Door de juiste constanten te definiëren in wp-config.php, kun je WordPress dwingen bepaalde security features te activeren die anders niet beschikbaar zijn. Dit is hardening op applicatieniveau.
Database Instellingen
De database instellingen zijn essentieel voor de werking van WordPress. Gebruik altijd sterke, unieke wachtwoorden en beperk de rechten van je database gebruiker.
// Database Instellingen
define( 'DB_NAME', 'jouw_database_naam' );
define( 'DB_USER', 'jouw_database_user' );
define( 'DB_PASSWORD', 'jouw_sterke_wachtwoord' );
define( 'DB_HOST', 'localhost' );
define( 'DB_CHARSET', 'utf8mb4' );
define( 'DB_COLLATE', '' );
// Unieke tabel prefix
$table_prefix = 'wp_abc123_';
Best practices voor database security:
DB_PASSWORD- Gebruik een lang, random wachtwoord (minimaal 32 karakters)DB_USER- Maak een dedicated database gebruiker, niet 'root'$table_prefix- Verander de standaard 'wp_' naar iets unieks om SQL injection moeilijker te makenDB_CHARSET- Gebruik 'utf8mb4' voor volledige Unicode support
Authentication Keys & Salts
Authentication Keys en Salts zijn willekeurige strings die WordPress gebruikt om cookies en wachtwoorden te versleutelen. Ze maken brute-force aanvallen op sessies vrijwel onmogelijk.
// Authentication Unique Keys and Salts
define( 'AUTH_KEY', 'genereer-unieke-lange-string-hier' );
define( 'SECURE_AUTH_KEY', 'genereer-unieke-lange-string-hier' );
define( 'LOGGED_IN_KEY', 'genereer-unieke-lange-string-hier' );
define( 'NONCE_KEY', 'genereer-unieke-lange-string-hier' );
define( 'AUTH_SALT', 'genereer-unieke-lange-string-hier' );
define( 'SECURE_AUTH_SALT', 'genereer-unieke-lange-string-hier' );
define( 'LOGGED_IN_SALT', 'genereer-unieke-lange-string-hier' );
define( 'NONCE_SALT', 'genereer-unieke-lange-string-hier' );
Debug Mode Uitschakelen
Debug mode is handig tijdens development, maar moet altijd uitgeschakeld zijn op productie websites. Het tonen van errors geeft hackers waardevolle informatie over je systeem.
// Debug mode UITSCHAKELEN voor productie
define( 'WP_DEBUG', false );
define( 'WP_DEBUG_LOG', false );
define( 'WP_DEBUG_DISPLAY', false );
@ini_set( 'display_errors', 0 );
Uitleg van debug instellingen:
WP_DEBUG- Hoofd schakelaar voor debug modeWP_DEBUG_LOG- Schrijf errors naar wp-content/debug.logWP_DEBUG_DISPLAY- Toon errors op de pagina (nooit op productie!)display_errors- Extra PHP-level bescherming tegen error weergave
Bestandsbewerking Blokkeren
WordPress heeft een ingebouwde code editor waarmee je themes en plugins direct vanuit het admin panel kunt bewerken. Dit is een enorm security risico - als een aanvaller admin toegang krijgt, kan hij direct malware injecteren.
// Blokkeer file editing via admin panel
define( 'DISALLOW_FILE_EDIT', true );
// Blokkeer ook plugin/theme installatie via admin
define( 'DISALLOW_FILE_MODS', true );
Verschil tussen de twee opties:
DISALLOW_FILE_EDIT- Verbergt de Theme Editor en Plugin Editor menu itemsDISALLOW_FILE_MODS- Blokkeert ook plugin/theme installatie en updates via de admin. Gebruik dit alleen als je updates via FTP/SSH doet.
SSL Forceren
SSL (HTTPS) versleutelt alle communicatie tussen de browser en je server. Voor het admin panel en login pagina is dit essentieel om credential theft te voorkomen.
// Forceer HTTPS voor admin en login
define( 'FORCE_SSL_ADMIN', true );
define( 'FORCE_SSL_LOGIN', true );
Deze instellingen zorgen ervoor dat alle admin pagina's en de login pagina alleen via HTTPS bereikbaar zijn. Als iemand probeert via HTTP te verbinden, wordt hij automatisch doorgestuurd naar HTTPS.
Autosave & Prullenbak Instellingen
WordPress slaat automatisch revisies op en houdt verwijderde items in de prullenbak. Dit kan leiden tot een opgeblazen database. Beperk deze instellingen voor betere performance.
// Autosave interval (in seconden, standaard 60)
define( 'AUTOSAVE_INTERVAL', 120 );
// Prullenbak automatisch legen na X dagen (standaard 30)
define( 'EMPTY_TRASH_DAYS', 7 );
Een langere autosave interval vermindert database writes. Een kortere prullenbak periode houdt je database schoner en voorkomt dat gevoelige content te lang bewaard blijft.
WP-Cron Uitschakelen
WP-Cron wordt standaard getriggerd bij elke pageview, wat inefficiënt is en misbruikt kan worden voor DDoS. Gebruik in plaats daarvan een echte server cronjob.
// Schakel WP-Cron uit (gebruik server cron)
define( 'DISABLE_WP_CRON', true );
*/5 * * * * wget -q -O - https://jouwsite.nl/wp-cron.php?doing_wp_cron >/dev/null 2>&1
Post Revisies Beperken
WordPress bewaart standaard onbeperkt revisies van je posts. Dit kan je database snel doen groeien. Beperk het aantal revisies of schakel ze helemaal uit.
// Beperk post revisies tot 5
define( 'WP_POST_REVISIONS', 5 );
// Of schakel revisies volledig uit
// define( 'WP_POST_REVISIONS', false );
5 revisies is meestal voldoende om onbedoelde wijzigingen terug te kunnen draaien, zonder dat je database onnodig groeit.
Extra Security Instellingen
Hier zijn nog enkele geavanceerde instellingen die je security verder kunnen verbeteren:
// File system methode (directe schrijftoegang)
define( 'FS_METHOD', 'direct' );
// Blokkeer externe HTTP requests (optioneel, kan plugins breken)
// define( 'WP_HTTP_BLOCK_EXTERNAL', true );
// define( 'WP_ACCESSIBLE_HOSTS', 'api.wordpress.org,*.github.com' );
// Memory limit verhogen indien nodig
define( 'WP_MEMORY_LIMIT', '256M' );
define( 'WP_MAX_MEMORY_LIMIT', '512M' );
Uitleg van extra instellingen:
FS_METHOD- Bepaalt hoe WordPress bestanden schrijft. 'direct' is het veiligst als file permissions correct zijn ingesteldWP_HTTP_BLOCK_EXTERNAL- Blokkeert alle externe HTTP requests. Nuttig voor extra isolatie, maar test goed!WP_MEMORY_LIMIT- Verhoogt de memory limiet voor WordPress
Volledige Configuratie
Hieronder vind je een complete wp-config.php template met alle security instellingen gecombineerd. Pas de waarden aan naar je eigen situatie.
<?php
/**
* ######################################################################
* # #
* # ********************************************************** #
* # * * #
* # * WPTS.nl WordPress Security Config * #
* # * ELITE wp-config.php - Plugin Free * #
* # * * #
* # * Touch this file = you own the consequences * #
* # * * #
* # ********************************************************** #
* # #
* ######################################################################
*/
########################################
# 1. Database Instellingen
########################################
define( 'DB_NAME', 'jouw_database_naam' );
define( 'DB_USER', 'jouw_database_user' );
define( 'DB_PASSWORD', 'jouw_sterke_wachtwoord' );
define( 'DB_HOST', 'localhost' );
define( 'DB_CHARSET', 'utf8mb4' );
define( 'DB_COLLATE', '' );
########################################
# 2. Authentication Keys & Salts
########################################
// Genereer op: https://api.wordpress.org/secret-key/1.1/salt/
define( 'AUTH_KEY', 'genereer-unieke-lange-string-hier' );
define( 'SECURE_AUTH_KEY', 'genereer-unieke-lange-string-hier' );
define( 'LOGGED_IN_KEY', 'genereer-unieke-lange-string-hier' );
define( 'NONCE_KEY', 'genereer-unieke-lange-string-hier' );
define( 'AUTH_SALT', 'genereer-unieke-lange-string-hier' );
define( 'SECURE_AUTH_SALT', 'genereer-unieke-lange-string-hier' );
define( 'LOGGED_IN_SALT', 'genereer-unieke-lange-string-hier' );
define( 'NONCE_SALT', 'genereer-unieke-lange-string-hier' );
########################################
# 3. Tabel Prefix
########################################
$table_prefix = 'wp_abc123_';
########################################
# 4. Debug Mode (UIT voor productie)
########################################
define( 'WP_DEBUG', false );
define( 'WP_DEBUG_LOG', false );
define( 'WP_DEBUG_DISPLAY', false );
@ini_set( 'display_errors', 0 );
########################################
# 5. File Editing Blokkeren
########################################
define( 'DISALLOW_FILE_EDIT', true );
define( 'DISALLOW_FILE_MODS', true );
########################################
# 6. SSL Forceren
########################################
define( 'FORCE_SSL_ADMIN', true );
define( 'FORCE_SSL_LOGIN', true );
########################################
# 7. Cookie Instellingen
########################################
define( 'COOKIE_DOMAIN', 'jouwdomein.nl' );
define( 'COOKIEPATH', '/' );
define( 'SITECOOKIEPATH', '/' );
define( 'ADMIN_COOKIE_PATH', '/wp-admin' );
########################################
# 8. Autosave & Prullenbak
########################################
define( 'AUTOSAVE_INTERVAL', 120 );
define( 'EMPTY_TRASH_DAYS', 7 );
########################################
# 9. WP-Cron Uitschakelen
########################################
define( 'DISABLE_WP_CRON', true );
########################################
# 10. Post Revisies Beperken
########################################
define( 'WP_POST_REVISIONS', 5 );
########################################
# 11. File System & Memory
########################################
define( 'FS_METHOD', 'direct' );
define( 'WP_MEMORY_LIMIT', '256M' );
define( 'WP_MAX_MEMORY_LIMIT', '512M' );
########################################
# 12. WordPress Paden (niet wijzigen)
########################################
if ( ! defined( 'ABSPATH' ) ) {
define( 'ABSPATH', __DIR__ . '/' );
}
require_once ABSPATH . 'wp-settings.php';
Veelgestelde Vragen
Ik krijg een witte pagina na wijzigingen
Er staat waarschijnlijk een syntax error in wp-config.php. Controleer op ontbrekende aanhalingstekens, puntkomma's of haakjes. Herstel je backup als je niet kunt vinden wat er mis is.
Kan ik DISALLOW_FILE_MODS later weer uitschakelen?
Ja, verander true naar false of verwijder de regel volledig. Doe dit alleen tijdelijk voor updates en zet het daarna weer aan.
Hoe genereer ik nieuwe Authentication Keys?
Ga naar https://api.wordpress.org/secret-key/1.1/salt/ en kopieer de gegenereerde regels naar je wp-config.php. Alle gebruikers worden automatisch uitgelogd.
Wat als mijn plugins niet meer werken met DISABLE_WP_CRON?
Als je WP-Cron uitschakelt, moet je een server cronjob instellen die regelmatig wp-cron.php aanroept. Zonder dit werken geplande taken niet meer.
Blijft dit werken na WordPress updates?
Ja! WordPress updates raken wp-config.php niet aan. Je instellingen blijven behouden na elke update.
Kan ik de tabel prefix van een bestaande site wijzigen?
Ja, maar dit vereist ook aanpassingen in de database. Je moet alle tabelnamen hernoemen en bepaalde waarden in de options en usermeta tabellen aanpassen. Maak eerst een backup!
Conclusie
Een goed geconfigureerd wp-config.php bestand is cruciaal voor de beveiliging van je WordPress website. Het is de eerste verdedigingslinie en bepaalt veel security instellingen die niet via plugins kunnen worden gewijzigd.
Checklist voor implementatie:
Hulp nodig met WordPress beveiliging?
Onze experts helpen je graag met het implementeren van deze en andere beveiligingsmaatregelen.