Absicherung von WordPress-Logins: WP Admin Captcha

Die Sicherung der WordPress-Anmeldeseite (wp-login.php) ist ein grundlegender Schritt, um eine Webseite vor bösartigen Aktivitäten zu schützen. Automatisierte Bots scannen das Internet ständig nach Schwachstellen und versuchen durch Brute-Force-Angriffe, unbefugten Zugriff zu erlangen. Das Plugin WP Admin Captcha bietet eine effiziente und leichtgewichtige Lösung, indem es Google reCAPTCHA v2 direkt in die Anmeldeoberfläche integriert.
Funktionsweise
Das Plugin greift in den Authentifizierungsprozess ein, bevor ein Benutzer eingeloggt wird. Es fügt das bekannte “Ich bin kein Roboter”-Kontrollkästchen zum Anmeldebildschirm hinzu, das eine manuelle Interaktion erfordert, um sicherzustellen, dass die Anmeldung von einem Menschen und nicht von einem Skript stammt. Beim Absenden des Formulars sendet das Plugin eine Anfrage an die Verifizierungsserver von Google. Sind die Schlüssel konfiguriert, wird der WordPress-Authentifizierungsprozess erst fortgesetzt, wenn Google den erfolgreichen Abschluss der Herausforderung bestätigt.
Hauptmerkmale
- Einfache Konfiguration: Über eine dedizierte Einstellungsseite können die Site- und Secret-Keys eingegeben werden. Seit dem Abschluss der Migration von reCAPTCHA Classic im ersten Quartal 2026 werden diese Schlüssel in der Google Cloud Console erzeugt und verwaltet, und jeder Schlüssel gehört zu einem Google-Cloud-Projekt; die alte reCAPTCHA Admin-Konsole dient nur noch der Einsicht in historische Daten. Bis zu 10.000 Assessments pro Monat bleibt die Nutzung kostenfrei.
- Aussperrschutz: Sollten die erforderlichen Schlüssel nicht konfiguriert sein, überspringt das Plugin die Verifizierung, um zu verhindern, dass Administratoren den Zugriff auf ihre eigene Webseite verlieren. Bis gültige Schlüssel hinterlegt sind, bleibt die Anmeldeseite damit ohne Captcha-Schutz.
- Minimaler Overhead: Durch die Nutzung nativer WordPress-Hooks und der integrierten HTTP-API wird sichergestellt, dass die Leistung der Webseite nicht beeinträchtigt wird.
- Open Source: Der Code ist transparent und auf GitHub für Überprüfungen oder Beiträge verfügbar: https://github.com/LW-IT-Solutions/wp-admin-captcha.
Fazit
WP Admin Captcha schützt WordPress-Anmeldeseiten vor automatisierten Brute-Force-Angriffen durch die Integration von Google reCAPTCHA v2 und hält Administratoren den Zugang offen, indem die Prüfung ausgesetzt bleibt, solange keine Schlüssel hinterlegt sind.
Fragen und Antworten
Greift der Aussperrschutz auch bei einem ungültigen Secret Key oder wenn die Prüfanfrage Google nicht erreicht?
Er greift nur, wenn keine Schlüssel hinterlegt sind. Sind Schlüssel vorhanden, wird die Aufgabe erzwungen, und eine Aufgabe, die sich nicht bestätigen lässt, gilt als nicht gelöst. Für eine Sicherheitsprüfung ist das richtig, während eines Ausfalls aber unbequem.
Ein falscher Secret Key und ein nicht erreichbarer Prüfendpunkt sehen von der Anmeldeseite aus deshalb gleich aus: Das Formular weist den Versuch ab. Dann braucht es einen zweiten Zugang, der nicht vom Plugin abhängt: über WP-CLI oder durch Umbenennen des Plugin-Verzeichnisses per SSH. Wer ein Captcha auf der Anmeldeseite einsetzt, sollte diesen Weg einmal ausprobiert haben, bevor er gebraucht wird.
Dazu gehört ein Detail zum Kontingent. Bis 10.000 Bewertungen im Monat ist die Nutzung kostenlos, und jede Prüfanfrage zählt mit. Eine Website unter anhaltendem Druck durch Bots kann diese Zahl erreichen, ohne dass eine einzige Anmeldung gelingt. Was jenseits der Grenze geschieht, hängt von der Abrechnung des Google-Cloud-Projekts ab; bestätigt die Prüfung ab dann nichts mehr, kommt der Fehler durch dieselbe Tür wie der Ausfall oben.
Deckt WP Admin Captcha auch Anmeldeversuche über xmlrpc.php ab?
Indirekt ja, wenn auch nicht so wie auf der Anmeldeseite. Ein Kontrollkästchen setzt eine Oberfläche voraus, und die Schnittstelle hat keine, weil sie Anmeldedaten in einem Aufruf entgegennimmt und maschinell antwortet. Die Prüfung des Plugins hängt aber nicht am Formular, sondern am Filter wp_authenticate_user, den WordPress bei jeder Anmeldung mit Benutzernamen und Kontopasswort durchläuft, auch bei einem Aufruf über xmlrpc.php. Einem solchen Aufruf fehlt das Captcha-Token, das nur das Anmeldeformular mitschickt, und die Anmeldung scheitert, bevor das Passwort überhaupt geprüft wird.
Daraus folgt zweierlei. Passwortversuche über die Schnittstelle laufen ins Leere, solange der Secret Key hinterlegt ist; ohne ihn greift der Aussperrschutz, und die Wirkung entfällt auch hier. Und Programme, die sich über XML-RPC mit dem Kontopasswort anmelden, scheitern ebenso; Anwendungspasswörter prüft WordPress auf einem eigenen Weg, an dem das Plugin nicht ansetzt.
Die Last bleibt trotzdem: Jeder Aufruf erreicht PHP, und eine einzelne Anfrage konnte historisch mehrere Anmeldeversuche bündeln, was Rate-Limits auf Anfrageebene unterläuft. Zwei Maßnahmen greifen dort, wo das Plugin nicht hinreicht. Wo nichts die Schnittstelle braucht – keine App, kein externer Editor, kein Dienst, der Beiträge einliefert –, ist sie abzuschalten; das ist die wirksamste und billigste Antwort. Wo sie gebraucht wird, gehört die Begrenzung eine Ebene tiefer, in den Webserver: eine Sperre nach wenigen Fehlversuchen je Adresse, unabhängig davon, welche Datei angesprochen wurde.
Kann eine Content Security Policy (CSP) der Grund sein, dass das reCAPTCHA-Feld trotz eingetragener Schlüssel fehlt?
Ja, eine CSP ist eine häufige Ursache für dieses Bild. Das Widget lädt Skripte von www.google.com/recaptcha/ und www.gstatic.com/recaptcha/ und bettet das Feld selbst in einen Frame von www.google.com/recaptcha/ ein. Eine Richtlinie, die diese Quellen nicht zulässt, blockiert sie, ohne auf der Seite eine sichtbare Spur zu hinterlassen.
Die Folge wiegt schwerer als das fehlende Feld. Der Aussperrschutz greift nur, wenn keine Schlüssel hinterlegt sind. Da die Schlüssel eingetragen sind, verlangt das Plugin eine Aufgabe, die niemand sieht, und das Formular weist dann jede Anmeldung ab, auch die des Administrators.
Klarheit bringt die Browserkonsole auf der Anmeldeseite: Dort stehen die blockierten Ressourcen samt dem Namen der Direktive. In script-src gehören beide Skriptquellen, in frame-src die Quelle des Frames. Außerdem lohnt es sich, schon vorher einen Zugang zu kennen, der nicht vom Plugin abhängt: Das Umbenennen seines Verzeichnisses per SSH stellt die Anmeldung binnen Sekunden wieder her.