Limiteer Login Pogingen
In het voorgaande artikel “Login Captcha” hebben we beschreven hoe we een “Captcha” kunnen toevoegen aan het inlogscherm van WordPress. Hiermee maken we het moeilijker voor hackers om met geautomatiseerde systemen in te loggen op je WordPress Website.
Dit is echter nog niet volledig waterdicht. Die Captcha-afbeelding kan namelijk ook met zgn. “OCR” technieken uitgelezen worden en personen die proberen in te loggen kunnen die Captcha uitlezen en invullen. Dan dient echter nog wel de gebruikersnaam en het wachtwoord correct te zijn en daar zijn doorgaans vele pogingen voor nodig om die te achterhalen.
Beperken we dan het aantal inlog-pogingen dan wordt de kans dat er ingelogd wordt tot het minimum teruggebracht.
Plugin Methode
Er bestaan diverse plugins om het aantal inlogpogingen te beperken. In het artikel “Limiteer Login Pogingen” beschreven we de plugin “Limit Login Attempts Reloaded”.
Het voordeel van het gebruik van een plugin is dat het eenvoudig is om een dergelijke functionaliteit toe te voegen.
We limiteren het aantal plugins dat we in gebruik hebben het liefst tot het minimum om onderlinge compatibiliteits-problemen te voorkomen en niet afhankelijk te zijn van onderhoud door anderen.
Code Snippet
Om het aantal login-pogingen te beperken hebben we een stukje code gemaakt welke we toevoegen aan het functions.php bestand van het Child-Thema.
Meer weten over het gebruik van Code-Snippets, bekijk dan dit artikel: WordPress Code Snippets.
De code om het aantal login-pogingen te beperken bestaat uit drietal functies. De eerste limiteert het aantal inlog-pogingen:
/* Limiteer Login Pogingen */ function qwain_check_attempted_login( $user, $username, $password ) { if ( get_transient( 'attempted_login' ) ) { $datas = get_transient( 'attempted_login' ); if ( $datas['tried'] >= 3 ) { /** Maximum aantal inlogpogingen */ $until = get_option( '_transient_timeout_' . 'attempted_login' ); $time = qwain_time_to_go( $until ); /* Foutmelding als limit bereikt */ return new WP_Error( 'too_many_tried', sprintf( __( 'Fout: Maximum inlogpogingen bereikt, probeer nogmaals over %1$s.' ) , $time ) ); } } return $user; } add_filter( 'authenticate', 'qwain_check_attempted_login', 30, 3 );
Met deze functie hebben we het aantal login-pogingen ingesteld op maximaal 3 keer. Wordt dat maximum overschreden zal er een foutmelding getoond worden en de ingestelde tijd waarna het nogmaals geprobeerd mag worden.
Met de volgende functie wordt de gebruikersnaam onthouden en de wachttijd ingesteld waarna de gebruiker het nogmaals mag proberen:
function qwain_login_failed( $username ) { if ( get_transient( 'attempted_login' ) ) { $datas = get_transient( 'attempted_login' ); $datas['tried']++; if ( $datas['tried'] <= 3 ) set_transient( 'attempted_login', $datas , 300 ); /* 300 is aantal seconden */ } else { $datas = array( 'tried' => 1 ); set_transient( 'attempted_login', $datas , 300 ); /* 300 is aantal seconden */ } } add_action( 'wp_login_failed', 'qwain_login_failed', 10, 1 );
De wachttijd is ingesteld op 300 seconden (= 5 minuten). Die tijd kan dan naar eigen wens ingesteld worden. Zou je dus een wachttijd willen van een half uur, dan verhoog je het aantal seconden naar: 30 x 60 = 1800.
Als laatste dienen we dan nog een foutmelding te genereren die de nog resterende wachttijd toont:
function qwain_time_to_go($timestamp) { $periods = array( "seconden", "minuut", "uur", "dag", "week", "maand", "jaar" ); $lengths = array( "60", "60", "24", "7", "4.35", "12" ); $current_timestamp = time(); $difference = abs($current_timestamp - $timestamp); for ($i = 0; $difference >= $lengths[$i] && $i < count($lengths) - 1; $i ++) { $difference /= $lengths[$i]; } $difference = round($difference); if (isset($difference)) { if ($difference != 1) switch ($i) { case 1: $periods[$i] = "minuten"; break; case 2: $periods[$i] = "uren"; break; case 3: $periods[$i] = "dagen"; break; case 4: $periods[$i] = "weken"; break; case 5: $periods[$i] = "maanden"; break; case 6: $periods[$i] = "jaren"; break; } $output = "$difference $periods[$i]"; return $output; } }
Hier converteren we de tijd naar een tekst-weergave welke dan als foutmelding op het inlogscherm getoond wordt. In het eerste deel van het aanpassen van het loginscherm hadden we de foutmelding aangepast en de overige foutmeldingen onderdrukt.
In deze versie hebben we de foutmeldingen weer aangezet, waardoor de gebruiker precies kan zien wat er fout is ingevoerd. We hebben dan 4 fout-situaties:




Van links naar rechts zien we dan de foutmelding welke getoond wordt bij verkeerde invoer van gebruikersnaam, wachtwoord, captcha en het als het aantal login-pogingen is overschreden.
3 Stappen…
We hebben nu dus in drie stappen het login-scherm aangepast. In deel-1 “WordPress Login Scherm Aanpassen” hebben we de styling van het login-scherm aangepast:
Daarna hebben we de “Captcha” toegevoegd (zie: Inlog met Captcha):
En als laatste het aantal inlog-pogingen gelimiteerd tot maximaal 3 met een wachttijd van 5 minuten om het nogmaals te proberen.
Met deze aanpassingen hebben we nu een eigen stijl inlogscherm met een Captcha en een beperking tot het aantal keren proberen om in te loggen.
Vragen & Info
Heb je vragen naar aanleiding van dit artikel, stuur ons dan een mail op: info@qwain.nl of geef een reactie via onderstaand reactie-formulier.
Ondersteuning staat bij ons op nummer 1, wij zijn je graag van dienst !
Op de hoogte blijven van alle WordPress Nieuwtjes, Tips & Tricks… schrijf je dan in voor onze nieuwsbrief
en volg ons op Facebook .
Overige Artikelen