Sicherheits-Trick 1: Anzahl Loginversuche ins WordPress-Backend beschränken

19. Dezember 2021 | Sicherheit, WordPress

WordPress lässt auf der Loginseite zum Backend eine unbeschränkte Anzahl Versuche zu. Das gibt Robots die Möglichkeit beliebige Kombinationen durchzuprobieren. Auch wenn der Zugriff nicht funktioniert: Die Serverlast steigt ob Brute-Force-Attacken. Doch Sie können die Zahl der vergeblichen Loginversuche beschränken.

Technische Attacken enden meist von selber nach kurzer Zeit, wenn klar wird, dass nach drei Versuchen nix zu wollen ist.

Der Code ist recht umfangreich. Kopieren Sie ihn und fügen Sie die Zeilen in die Datei functions.php Ihrer WordPress-Website ein. Sie finden die functions.php unter Design/Theme-Editor:

function check_attempted_login( $user, $username, $password ) {
    if ( get_transient( 'attempted_login' ) ) {
        $datas = get_transient( 'attempted_login' );
        if ( $datas['tried'] >= 3 ) {
            $until = get_option( '_transient_timeout_' . 'attempted_login' );
            $time = time_to_go( $until );
            return new WP_Error( 'too_many_tried',  sprintf( __( '<strong>Fehler:</strong> Sie haben das Limit der erlaubten Loginversuche überschritten. Versuchen Sie es in %1$s erneut.' ) , $time ) );
        }
    }
    return $user;
}
add_filter( 'authenticate', 'check_attempted_login', 30, 3 ); 
function 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 );
    } else {
        $datas = array(
            'tried'     => 1
        );
        set_transient( 'attempted_login', $datas , 300 );
    }
}
add_action( 'wp_login_failed', 'login_failed', 10, 1 ); 
function time_to_go($timestamp)
{
    $periods = array(
        "Sekunde",
        "Minute",
        "Stunde",
        "Tag",
        "Woche",
        "Monat",
        "Jahr"
    );
    $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)
            $periods[$i] .= "n";
            $output = "$difference $periods[$i]";
            return $output;
    }
}

In Zeile 7 können Sie einen eigenen Text hinterlegen. Mit dem Beispielcode muss der spätestens der 3. Loginversuch erfolgreich sein. Ansonsten lässt WordPress drei Minuten lang kein Login mehr mit demselben Usernamen zu.

Werbung

Werbung

 

Kostenlose WordPress- und Divi-Tricks im Abo

Wir schicken Ihnen sporadisch (weniger als 10x jährlich) neue Tricks für Wordpress und das Divi-Theme, aber auch hilfreiche CSS- und HTML-Codes frei Haus.

Füllen Sie zur Anmeldung das folgende Formular aus. Angaben mit * sind Pflichtangaben.









Vielen Dank.

Pin It on Pinterest

Share This