Post navigation

WP-Sicherheit: Benutzeranmeldung nur mit E-Mail, statt Benutzernamen

WordPress Snippets · · 2 Kommentare

Seit der WordPress Version 4.5 ist eine Benutzeranmeldung auch mit einer E-Mail-Adresse und dem Passwort möglich. Um Hacker zu ärgern und WordPress ein bisschen sicherer zu machen, kannst Du Dich mit diesem Code ausschließlich mit E-Mail und Passwort anmelden.

Die Idee ist faszinierend. Eine Benutzeranmeldung nur noch mit E-Mail-Adresse und Passwort zuzulassen wird auch Hackern einiges an Stirnrunzeln beibringen.

➜ Meine Empfehlung für Dich:Raidboxes Managed WordPress Hosting

Benutzeranmeldung nur mit E-Mail und Passwort

Achtung: Du solltest hier darauf achten, dass Du nicht die gleiche E-Mail-Adresse für die Anmeldung nutzt, die auch auf der Website unter Kontakt oder auf dem Impressum zu finden ist. Das würde das Plus an Sicherheit wieder zunichte machen.

Der Code

  • WordPress Version: inkl. 4.6
  • PHP-Version: inkl. PHP 7

Kopiere den folgenden Code in deine functions.php des aktiven Themes hinein:

<?php

// Ab hier kopieren
//WordPress Authentifikation löschen
remove_filter('authenticate', 'wp_authenticate_username_password', 20);

// Neue Authentifikation setzen - Anmelden nur mit E-Mail und Passwort
add_filter('authenticate', function($user, $email, $password){
 
    //Check for empty fields
        if(empty($email) || empty ($password)){        
            //create new error object and add errors to it.
            $error = new WP_Error();
 
            if(empty($email)){ //No email
                $error->add('empty_username', __('<strong>ERROR</strong>: Email field is empty.'));
            }
            else if(!filter_var($email, FILTER_VALIDATE_EMAIL)){ //Invalid Email
                $error->add('invalid_username', __('<strong>ERROR</strong>: Email is invalid.'));
            }
 
            if(empty($password)){ //No password
                $error->add('empty_password', __('<strong>ERROR</strong>: Password field is empty.'));
            }
 
            return $error;
        }
 
        //Check if user exists in WordPress database
        $user = get_user_by('email', $email);
 
        //bad email
        if(!$user){
            $error = new WP_Error();
            $error->add('invalid', __('<strong>ERROR</strong>: Either the email or password you entered is invalid.'));
            return $error;
        }
        else{ //check password
            if(!wp_check_password($password, $user->user_pass, $user->ID)){ //bad password
                $error = new WP_Error();
                $error->add('invalid', __('<strong>ERROR</strong>: Either the email or password you entered is invalid.'));
                return $error;
            }else{
                return $user; //passed
            }
        }
}, 20, 3);

Ab sofort ist dann eine Benutzeranmeldung im Adminbereich nur noch mit E-Mail-Adresse und Passwort möglich. Ein Benutzername wird nicht mehr akzeptiert.

Abonniere meinen Newsletter

Melde Dich für meinen Newsletter "WordPress & Bloggen" an und verpasse keinen Artikel. Als Dankeschön bekommst Du Gratis meine nützliche Checkliste:
»12 Dinge, die Du vor einem Theme-Wechsel beachten solltest«.

Andreas Hecht

ist WordPress-Entwickler und bietet dir WordPress-Sicherheit für deine Website. Zudem entwickelt er WooCommerce Shops mit Ladezeiten von unter einer Sekunde. Er ist ebenfalls Autor von drei richtig guten WordPress E-Books.

2 thoughts on “WP-Sicherheit: Benutzeranmeldung nur mit E-Mail, statt Benutzernamen

  • Hallo Andreas,
    funktioniert der Code auch in Zusammenhang mit dem SecSign plugin? Bei meinem ersten Test kann ich mich nicht anmelden, wenn ich neben SecSign die Möglichkeit für Login mit Passwort noch erlaube. Über SecSign ID funktioniert es natürlich noch.
    Vielen Dank

    • Hallo Gunar,

      das habe ich nicht getestet, der Wahrscheinlichkeit nach sollte es jedenfalls funktionieren. Allerdings ergibt SecSign keinen Sinn, wenn Du noch andere Möglichkeiten der Anmeldung zulässt.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.