WordPress 2FA automatisieren: E-Mail-Pflicht für alle User ohne nervige Apps

Autor
Lesezeit
Share

Sicherheit im WordPress-Backend steht ganz oben auf der To-do-Liste, aber die Realität zeigt: Sobald Benutzer eine Authenticator-App installieren oder QR-Codes scannen müssen, scheitert es an der Akzeptanz. Die Lösung? Ein globaler Zwei-Faktor-Zwang, der komplett über die ohnehin hinterlegte E-Mail-Adresse der User läuft.

Wer jetzt an aufgeblähte Sicherheits-Plugins denkt, die diese Funktion oft hinter einer teuren Premium-Paywall verstecken, kann beruhigt sein. Es geht extrem leichtgewichtig, kostenlos und vollautomatisch.

Das Problem mit den großen Security-Plugins

Viele bekannte All-in-One-Sicherheitslösungen bringen zwar 2FA-Optionen mit, blockieren die automatische Durchsetzung für alle Benutzerrollen aber gerne in der Gratis-Version. Zudem belasten sie die Datenbank mit unzähligen Funktionen, die man oft gar nicht benötigt.

Mit einer Kombination aus dem offiziellen WordPress-Community-Plugin und ein paar Zeilen Code lässt sich ein maßgeschneidertes System aufsetzen.

https://de.wordpress.org/plugins/two-factor/

Die schlanke Profilösung: Step-by-Step

1. Das Core-Plugin installieren

Die Basis bildet das Plugin Two Factor (entwickelt von WordPress-Core-Mitwirkenden). Es ist minimalistisch, sauber programmiert und verzichtet auf unnötigen Ballast im Dashboard.

  • Aktion: Im WordPress-Backend unter Plugins > Installieren nach Two Factor suchen, installieren und aktivieren.

2. E-Mail-Zwang per Code erzwingen

Standardmäßig erlaubt das Plugin den Nutzern, selbst zwischen App, E-Mail oder Backup-Codes zu wählen. Um den Login-Prozess für das gesamte Team zu vereinheitlichen und die E-Mail-Methode für ausnahmslos jeden Account vorzuschreiben, reicht ein kleiner Filter in der functions.php des Child-Themes (oder via Code-Snippets-Plugin):

PHP

add_filter( 'two_factor_enabled_providers_for_user', function( $enabled_providers, $user_id ) {
    return array( 'Two_Factor_Email' );
}, 10, 2 );

Dieser Schnipsel deaktiviert im Hintergrund alle anderen Authentifizierungsmethoden und schaltet den E-Mail-Code für jeden User scharf. Sobald sich jemand mit Benutzername und Passwort anmeldet, sendet WordPress automatisch den Verifizierungscode an das Postfach des Users.

Worauf beim E-Mail-Versand zu achten ist

Da der Zugriff auf das Backend nun direkt an den Posteingang gekoppelt ist, wird die Zuverlässigkeit des Mail-Versands zum kritischen Faktor. Der Standard-Versand über den Server (PHP mail()) ist hierfür oft zu unzuverlässig und landet schnell im Spam-Ordner.

Sicherheitshinweis: Für dieses Setup ist die Nutzung eines dedizierten SMTP-Plugins (wie z. B. FluentSMTP) in Verbindung mit einem professionellen Mail-Provider absolute Pflicht. Nur so ist sichergestellt, dass die Login-Codes innerhalb weniger Sekunden im Posteingang landen und sich niemand versehentlich aussperrt.

Das Ergebnis

Mit minimalem Code-Einsatz steht ein extrem sicheres System, das ohne User-Einschulung funktioniert. Niemand muss eine zusätzliche App auf dem Smartphone einrichten – das System greift ab dem nächsten Login und schützt die WordPress-Instanz effektiv vor Brute-Force-Angriffen.

Achtung bei WooCommerce-Shops!

Wer das obige Snippet eins zu eins in einem Onlineshop einsetzt, sperrt im schlimmsten Fall seine Kunden aus oder zerstört die User Experience im Kundenbereich. Standardmäßig würde WordPress nämlich auch von jedem Shopper nach dem Login im Frontend einen Bestätigungscode verlangen.

Um das zu verhindern, muss der Code so erweitert werden, dass die Rollen customer (Kunde) und subscriber (Abonnent) ignoriert werden. So bleibt der Shop-Login für Kunden barrierefrei, während Admins, Redakteure und Shop-Manager im Hintergrund maximal abgesichert sind.

/**
 * Erzwingt die E-Mail-2FA-Methode nur für administrative und redaktionelle Rollen
 * WooCommerce-Kunden und Abonnenten bleiben ausgeschlossen
 */
add_filter( 'two_factor_enabled_providers_for_user', function( $enabled_providers, $user_id ) {
    $user = get_userdata( $user_id );
    if ( ! $user ) {
        return $enabled_providers;
    }

    // Diese Rollen sind vom E-Mail-Zwang ausgenommen
    $excluded_roles = array( 'customer', 'subscriber' );

    // Prüfen, ob der User eine der ausgeschlossenen Rollen hat
    $user_roles = (array) $user->roles;
    $intersect  = array_intersect( $user_roles, $excluded_roles );

    if ( empty( $intersect ) ) {
        // User hat keine der Ausnahme-Rollen -> E-Mail-2FA erzwingen
        return array( 'Two_Factor_Email' );
    }

    return $enabled_providers;
}, 10, 2 );

Hinterlasse den ersten Kommentar