Viele Seiten kämpfen mit dem Problem der BrutForce-Attacken auf die wp-login.php
. WordPress gibt einige nützliche Tipps um dies zu vermeiden.
Gefallen hat mir auch, was das scheinbar sehr populäre Plugin Hide My WP-Plugin macht. Es lässt sich so einstellen, dass die wp-login.php
nur aufrufen lässt, wenn ein spezielle Parameter dran hängt. Dieser wiederum lässt sich selbst definieren.
Beispiel
Parameter: access
Wert: yes
Weiterleitung erfolgt bei Aufruf von:http://meine-beispiel-website.de/wp-login.php
Nicht jedoch bei:http://meine-beispiel-website.de/wp-login.php?access=yes
Das ganze hat nur einen Nachteil: Der PHP-Parser muss bemüht werden der dann wiederum den Redirect-Header schreibt. Schneller geht es natürlich mit einer .htaccess
-Redirect-Anweisung. Vorausgesetzt natürlich Apache kommt zum Einsatz. Und: Das mod_rewrite
Modul muss aktiviert sein.
wp-login.php via .htaccess umleiten falls kein PHP-Parameter angegeben wurde
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} wp-login.php
RewriteCond %{QUERY_STRING} !(access=yes)|(action=logout)
RewriteRule . https://wp-buddy.com [R=301,L,NS]
</ifModule>
404-Fehler via .htaccess erzeugen, wenn kein PHP-Parameter angegeben wurde
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} wp-login.php
RewriteCond %{QUERY_STRING} !(access=yes)|(action=logout)
RewriteRule . - [R=404,L,NS]
</ifModule>
Letztendlich kann man in beiden Beispielen access=yes durch jeden beliebigen Parameter ersetzen. Was nicht ersetzt werden darf ist der Parameter action=logout da sonst die Logout-Funktionalität nicht mehr gewährleistet ist.
Hinter ersteres Beispiel lässt sich auch noch das Fehlerdokument angeben, falls gewünscht:
ErrorDocument 404 /error.php?e=404
Ohne Plugin geht es nicht
Trotz alledem braucht man noch ein kleines WordPress-Plugin welches sich darum kümmert, dass der Parameter auch im Formular selbst auftaucht. Sonst kann WordPress den Login nicht durchführen. Dazu erstellt man eine kleine Datei z.B. mit dem Namen login-limitation.php
und schiebt es per FTP in den Ordner /wp-content/plugins/
.
Der Inhalt könnte wie folgt aussehen (Download von GitHub):
<?php
/*
Plugin Name: Mein Login-Limitation Plugin
Description: Fügt einen Parameter in das wp-login.php Formular an.
*/
// sorgt dafür, dass der acceess=yes Parameter angehängt wird, wenn das Formular abgesendet wird.
function wpbll_site_url( $url, $path, $scheme, $blog_id ){
if( 'wp-login.php' == $path && 'login_post' == $scheme){
return 'wp-login.php?access=yes';
}
return $url;
}
add_filter( 'site_url', 'wpbll_site_url', 10, 4 );
// sorgt dafür, dass das Formular trotzdem wieder angezeigt wird, auch wenn man ausgeloggt wurde.
function wpbll_logout_redirect( $location, $status ){
if( false !== stripos($location, 'loggedout=') ){
return $location . '&access=yes';
}
return $location;
}
add_filter( 'wp_redirect', 'wpbll_logout_redirect', 10, 2 );