Hoe beperk ik het aantal inlogpogingen in WordPress?
Door Eureka Studio · Bijgewerkt op
Kort antwoord
WordPress laat iedereen eindeloos wachtwoorden raden. Om inlogpogingen te beperken gebruik je een plugin die mislukte inlogpogingen per IP binnen een tijdvenster telt en dat IP een tijdje blokkeert, bijvoorbeeld: 8 mislukte pogingen in 5 minuten betekent 15 minuten wachten. Zorg dat mislukte 2FA-codes en applicatiewachtwoorden ook meetellen, en zet je eigen IP op de lijst met toegestane IP's.
Stappen
1Stap 1
Kijk hoe onbeperkt raden eruitziet
Zonder limiet beantwoordt WordPress elk verkeerd wachtwoord met dezelfde foutmelding, zo vaak als erom gevraagd wordt, en de standaardmelding bevestigt zelfs dat de gebruikersnaam bestaat.

2Stap 2
Zet Inloglimieten aan en stel de regels in
Open in WordPress Hushfort → Limieten & beperkingen en zet Inloglimieten inschakelen aan. De standaardwaarden zijn 8 mislukte pogingen binnen 5 minuten, daarna een blokkade van 15 minuten; na 4 blokkades binnen 24 uur duurt de blokkade 1.440 minuten. Klik op Wijzigingen opslaan.

3Stap 3
Zet je eigen IP op de lijst en controleer de IP-bron
Stel verderop de IP-bron in. "Automatisch (alleen geverifieerde proxy-headers)" past bij de meeste sites, ook die achter Cloudflare. Voeg daarna het IP van je kantoor of thuis toe onder Toegestane IP's, zodat je jezelf nooit kunt buitensluiten, en sla op.

4Stap 4
Ontvang een e-mail als een IP wordt geblokkeerd
Zet Waarschuwingsmail aan en vul een of meer adressen in, gescheiden door komma's. De schakelaar heeft werkende SMTP op de site nodig; zonder SMTP laat Hushfort de optie uit en legt het uit waarom.

5Stap 5
Zie de limiet aan het werk
Na het toegestane aantal mislukte pogingen wordt het IP geblokkeerd in plaats van dat het nog een kans krijgt. Geschiedenis toont elke actieve blokkade met de geprobeerde gebruikersnaam, het aantal pogingen en wanneer de blokkade afloopt, met een knop Deblokkeren.
Waarom het ertoe doet
Een brute-force-aanval is niets meer dan geduld: probeer een wachtwoord, heb het mis, probeer het volgende. WordPress vindt dat prima. Het beantwoordt duizend verkeerde gokken vanaf hetzelfde adres net zo beleefd als de eerste. Heeft een account een zwak of hergebruikt wachtwoord, dan is het een kwestie van tijd.
Een inloglimiet verandert de rekensom. Kan een IP maar een handvol pogingen doen voordat het een kwartier moet wachten, dan kost het raden van een fatsoenlijk wachtwoord jaren in plaats van uren. Bovendien hoeft je server de inlogpagina niet steeds opnieuw voor een bot op te bouwen.
Wat het in zijn eentje niet afdekt. Aanvallers met duizenden IP-adressen kunnen vanaf elk adres een paar gokken doen. Daarom werkt een inloglimiet het best samen met tweefactorauthenticatie, waardoor een geraden wachtwoord zonder de code waardeloos is.
Veelgemaakte fouten
- Alleen het inlogformulier tellen. Wachtwoorden kunnen ook worden geprobeerd via
xmlrpc.php, via applicatiewachtwoorden van de REST API en bij de stap van de 2FA-code. Tellen die niet mee voor de limiet, dan gebruiken aanvallers gewoon die. Sluit ook inloggen via XML-RPC af; lees hoe je XML-RPC veilig uitschakelt. - Achter een proxy het verkeerde IP lezen. Zit je site achter Cloudflare en leest de
plugin het adres van de proxy, dan kan één bot alle bezoekers buitensluiten. Vertrouwt hij
daarentegen blind de header
X-Forwarded-For, dan kan een bot bij elk verzoek een nieuw IP verzinnen en wordt hij nooit geteld. De veilige regel: vertrouw proxy-headers alleen als het verzoek echt van de proxy komt. - Te lange blokkades. Een blokkade van 24 uur voor drie typefouten straft je eigen medewerkers. Hou de eerste blokkade kort en maak herhaalde blokkades langer.
- Geen lijst met toegestane IP's. Voeg je eigen vaste IP toe, zodat een vergeten wachtwoord je nooit buitensluit.
Zonder plugin
WordPress heeft een hook, wp_login_failed, die na elke mislukte inlogpoging afgaat. Je kunt
mislukte pogingen tellen met een transient en logins weigeren als het aantal te hoog wordt.
Een minimale versie als must-use-plugin (wp-content/mu-plugins/login-limit.php):
<?php
add_action( 'wp_login_failed', function () {
$key = 'll_' . md5( $_SERVER['REMOTE_ADDR'] );
$n = (int) get_transient( $key );
set_transient( $key, $n + 1, 15 * MINUTE_IN_SECONDS );
} );
add_filter( 'authenticate', function ( $user ) {
$key = 'll_' . md5( $_SERVER['REMOTE_ADDR'] );
if ( (int) get_transient( $key ) >= 8 ) {
return new WP_Error( 'too_many', 'Too many failed attempts. Try again later.' );
}
return $user;
}, 30 );
Het werkt, maar wees eerlijk over wat het mist: het leest alleen REMOTE_ADDR, dus achter
een proxy telt het de proxy; het telt gokken via XML-RPC-multicall niet als afzonderlijke
pogingen; het heeft geen lijst met toegestane IP's, geen waarschuwingsmail en geen log. Elk
daarvan is extra code om te schrijven en te onderhouden.
Sommige hosts bieden ook tools op serverniveau, zoals fail2ban dat het toegangslog in de gaten houdt. Dat is sterk als je host het voor je draait; op gedeelde hosting kun je het meestal niet zelf instellen.
Als er iets misgaat
- Je hebt jezelf buitengesloten. Wacht tot de blokkade afloopt, probeer het vanaf een ander netwerk zoals mobiele data, of vraag een andere beheerder je IP aan de lijst met toegestane IP's toe te voegen.
- Iedereen wordt tegelijk geblokkeerd. Je site zit waarschijnlijk achter een proxy en de plugin leest het IP van de proxy. Wijzig de instelling IP-bron.
- Er vinden nooit blokkades plaats. Controleer of de IP-bron een header vertrouwt die bots kunnen vervalsen. Toont elke poging een ander "IP", dan is dat de oorzaak.
Alle manieren om weer binnen te komen vind je in Buitengesloten na het wijzigen van de inlog-URL.
Met Hushfort
Inloglimieten is onderdeel van Hushfort Pro, de add-on bovenop Hushfort Security, de gratis WordPress-beveiligingsplugin.
De laag Inloglimieten van Hushfort telt mislukte inlogpogingen per IP (of per IP en gebruikersnaam) binnen een tijdvenster dat jij kiest, en blokkeert het IP voor een duur die jij kiest. Herhaalde blokkades binnen 24 uur kunnen een langere, verlengde blokkade opleveren.
- Mislukte 2FA-codes en mislukte logins met applicatiewachtwoorden tellen ook mee, dus er is geen zijdeur om te raden.
- Proxy-headers worden alleen vertrouwd als het verzoek echt van Cloudflare of een privénetwerk komt.
- Waarschuwingsmails gaan naar zoveel adressen als je opgeeft.
- Elke mislukte en geblokkeerde poging verschijnt in een filterbare Geschiedenis.
- De lijst met toegestane IP's wordt gedeeld met elke andere laag van Hushfort, dus je voegt jezelf maar één keer toe.
Als je Hushfort deactiveert, worden alle bestaande blokkades opgeheven.
Veelgestelde vragen
Hoeveel inlogpogingen moet ik toestaan?
Beperkt WordPress inlogpogingen standaard?
Kan een inloglimiet mij buitensluiten van mijn eigen site?
Is het beperken van inlogpogingen genoeg om brute force te stoppen?
Waarom treffen blokkades achter Cloudflare de verkeerde mensen?
Gerelateerde handleidingen
Hoe stel ik tweestapsverificatie (2FA) in voor WordPress?
Stel tweestapsverificatie in WordPress in met elke authenticator-app, bewaar je herstelcodes en weet wat je doet als je je telefoon kwijtraakt.
Bekijk de stappenWat is xmlrpc.php en hoe schakel ik het uit in WordPress?
xmlrpc.php is een tweede inlogdeur die een verborgen inlogpagina niet sluit. Zo schakel je XML-RPC veilig uit, behoud je pingbacks en test je het.
Bekijk de stappenHoe wijzig ik de inlog-URL van WordPress en verberg ik wp-admin?
Wijzig de WordPress-inlog-URL en verberg wp-admin in vijf veilige stappen. Test voordat je uitlogt en weet hoe je weer binnenkomt als je hem vergeet.
Bekijk de stappen
