Kann ich die Aufzählung von Benutzernamen auf meiner WordPress-Site verhindern? Ich kann im Moment Benutzer sehen, die das WPScan-Tool verwenden.
Kann ich die Aufzählung von Benutzernamen auf meiner WordPress-Site verhindern? Ich kann im Moment Benutzer sehen, die das WPScan-Tool verwenden.
Antworten:
Eine einfache Lösung, die ich in einem verwende .htaccess
:
RewriteCond %{REQUEST_URI} !^/wp-admin [NC]
RewriteCond %{QUERY_STRING} author=\d
RewriteRule ^ - [L,R=403]
Es ähnelt der Antwort von @ jptsetme, funktioniert jedoch auch, wenn die Abfragezeichenfolge lautet /?dummy&author=5
und das Suchmuster für RewriteRule
sehr schnell ist: ([0-9]*)
In regulären Ausdrücken wird häufig ein Capture dafür angezeigt . Es ist jedoch nicht erforderlich, Speicherplatz für die Erfassung zu verschwenden, wenn Sie den erfassten Ausdruck nicht verwenden, und eine Übereinstimmung für das erste Zeichen ist ausreichend, da Sie nicht akzeptieren möchten author=1b
.
Update 20.04.2017
Ich sehe mehr "kaputte" Anfragen von Leuten, die sogar zu dumm sind, um einen einfachen Scan durchzuführen. Die angeforderten URLs sehen folgendermaßen aus:
/?author={num:2}
Sie können die obige Regel also erweitern auf:
RewriteCond %{REQUEST_URI} !^/wp-admin [NC]
RewriteCond %{QUERY_STRING} ^author=\d+ [NC,OR]
RewriteCond %{QUERY_STRING} ^author=\{num
RewriteRule ^ - [L,R=403]
Das kannst du nicht.
Das WPScan-Tool ist ein automatisiertes Dienstprogramm, das die benutzerfreundlichen URLs von WordPress nutzt, um Benutzernamen zu ermitteln. Es durchläuft die ersten 10 möglichen IDs für Autoren und überprüft den Location
Header der HTTP-Antwort, um einen Benutzernamen zu finden.
Verwenden Sie http://mysite.url
zum Beispiel ...
WPScan prüft http://mysite.url/?author=1
. Wenn Ihre Site hübsche Permalinks verwendet, wird eine 301-Weiterleitung mit dem Location
Header "" zurückgegeben http://mysite.url/author/username
. Wenn Ihre Site keine hübschen Permalinks verwendet, wird stattdessen der Status 200 (OK) zurückgegeben, sodass WPScan den Feed auf die Zeichenfolge "Beiträge nach Benutzername" überprüft und den Benutzernamen extrahiert.
Nur weil jemand Ihren Benutzernamen erraten kann, bedeutet dies nicht, dass Ihre Website unsicher ist. Und es gibt wirklich keine Möglichkeit, jemanden daran zu hindern, Ihre Website so zu analysieren.
Jedoch ...
Wenn Sie sich darüber wirklich Sorgen machen, empfehle ich Ihnen, zwei Dinge zu tun:
Eine andere Alternative besteht darin, die Permalink-Änderungen Ihres Autors zu ändern. Es gibt verschiedene Möglichkeiten, dies zu tun, und wahrscheinlich finden Sie auch einige auf dieser Website .
Ich habe das nicht gründlich getestet, aber ich denke, es ist besser, die zugrunde liegende Ressource zu entfernen, als zu versuchen, auf Webserverebene Wände darum herum zu errichten. In WP-Begriffen würde dies die Verarbeitung von Autoren-bezogenen Abfragevariablen verhindern.
if ( ! is_admin() ) {
add_filter(
'query_vars',
function ( $public_query_vars ) {
foreach ( array( 'author', 'author_name' ) as $var ) {
$key = array_search( $var, $public_query_vars );
if ( false !== $key ) {
unset( $public_query_vars[$key] );
}
}
return $public_query_vars;
}
);
}
PS: Beachten Sie, dass dies Autorenarchive gänzlich tötet , was möglicherweise der Paranoia-Stufe entspricht oder nicht :)
Sie können eine .htaccess-Umschreiberegel verwenden, um diese Offenlegung zu verhindern. Sie sollten jedoch auch Spitznamen verwenden, um die Offenlegung von Benutzernamen in syntaktisch analysierbaren Inhalten zu vermeiden, wie von EAMann beschrieben.
Der folgende Blog beschreibt die Vorgehensweise, enthält jedoch einen Tippfehler in der Umschreiberegel: http://www.question-defense.com/2012/03/20/block-wordpress-user-enumeration-secure-wordpress-against-hacking
Die richtige Regel sollte auch die Abfragezeichenfolge aus der umgeschriebenen URL entfernen, da sonst der Benutzername weiterhin angezeigt wird. Es sollte so aussehen:
# Stop wordpress username enumeration vulnerability
RewriteCond %{REQUEST_URI} ^/$
RewriteCond %{QUERY_STRING} ^/?author=([0-9]*)
RewriteRule ^(.*)$ http://yoursite.com/somepage/? [L,R=301]
Gut für uns.
Ich wollte hinzufügen, dass Sie dies auch auf Nginx tun können. Prüfen Sie:
» Blockieren der WordPress-Benutzeraufzählung unter nginx - www.edwidget.name
Als Randnotiz wollte ich die Aufzählung von Benutzernamen auf meiner mit WP Engine gehosteten Site verhindern, wodurch der Zugriff der Benutzer auf Nginx-Konfigurationsdateien auf niedriger Ebene eingeschränkt wird. Sie haben jedoch einen Abschnitt "Weiterleitungsregeln" in ihrer Systemsteuerung, mit dem Sie dies erreichen können. Nach einiger Zeit gelang es mir, die beste Konfiguration herauszufinden:
Redirect Name: // choose a description for the rewrite
Domain: // you *must* select a domain; "All Domains" will *not* work here!
Source: ^/$
Destination: /?
Dann müssen Sie das Advanced Settings
Panel anzeigen ...
Match args: author=([0-9]*)
Rewrite type: 301 Permanent
Et voila, deine Benutzernamen sind sicher!
Ich habe die Benutzeraufzählung von WPScan vollständig blockiert, indem ich in htaccess Folgendes hinzugefügt habe
# Stop wordpress username enumeration vulnerability
RewriteCond %{REQUEST_URI} ^/$
RewriteCond %{QUERY_STRING} ^/?author=([0-9]*)
RewriteRule ^(.*)$ http://yourdomain.com [L,R=301]
RewriteCond %{QUERY_STRING} author=d
RewriteRule ^ /? [L,R=301]
Meine berufliche Meinung als Penetrationstester für eine Regierungsbehörde ... es ist IMMEREs lohnt sich, die Aufzählung von Informationen zu Ihrer Website zu erschweren. Nur wenige von Ihnen werden eine Website haben, die sich über den Google Script Kiddie Hackern erhebt. Wir sprechen von mehrschichtiger Sicherheit. Mit jeder Schicht erhöhen Sie die Zeit und Komplexität eines Penetrationsversuchs. Jede Ebene erhöht auch die Fähigkeiten, die der Hacker benötigt. In WP sind einige wirklich gute Anwendungsfirewalls verfügbar. Suchen Sie nach IP-Adressen, die wiederholte Anmeldeversuche von Benutzern oder 404 blockieren können. Ihre Firewall blockiert automatisch IP-Adressen, die Ihre Website nach nicht vorhandenen Seiten durchsuchen, oder versucht, sich wiederholt bei Ihrer Website anzumelden. Zu einer guten Funktion gehören auch die Funktionen zum Blockieren von XSS- und SQL-Injections. Erwägen Sie die Verwendung von All-in-One-WP-Sicherheit von Tipps und Tricks HQ, Peter, Ruhul, Ivy.
Anstelle der .htaccess
Route können Sie auch den folgenden Code zum Thema Ihres Kindes hinzufügen functions.php
:
# Redirect author page to homepage
add_action( 'template_redirect', 'wpse_46469_author_page' );
function wpse_46469_author_page() {
# If the author archive page is being accessed, redirect to homepage
if ( is_author() ) {
wp_safe_redirect( get_home_url(), 301 );
exit;
}
}
Darüber hinaus können Sie die standardmäßigen Autorenlinks, die zum Benutzernamen jeder Seite hinzugefügt werden, auf eine andere Art und Weise ändern (z. B. auf die Startseite), indem Sie Folgendes ausführen:
# Replace author URL with the homepage
add_filter( 'author_link', 'wpse_46469_author_link' );
function wpse_46469_author_link() {
# Return homepage URL
return home_url();
}
Ich weiß, dass dies ein alter Beitrag ist, aber für zukünftige Referenzen möchte ich auch meine Lösung hinzufügen. Dies ist nur ein Ausschnitt functions.php
aus Ihrem Thema. Es wird alles an Ort und Stelle belassen und funktionieren, sogar die Archive des Autors, aber es werden die schlechten Aufzählungsanfragen ausgeblendet.
if (!is_admin()) {
if( preg_match('/author=([0-9]*)/i', $_SERVER['QUERY_STRING']) ) {
add_filter( 'query_vars', 'iside_remove_author_from_query_vars' );
}
add_filter('redirect_canonical', 'iside_remove_author_from_redirects', 10, 2);
}
function iside_remove_author_from_redirects($redirect, $request) {
if( !is_admin() && preg_match('/author=([0-9]*)/i', $_SERVER['QUERY_STRING']) ) {
add_filter( 'query_vars', 'iside_remove_author_from_query_vars' );
}
return $redirect;
}
function iside_remove_author_from_query_vars( $query_vars ) {
if( !is_admin() ) {
foreach( array( 'author', 'author_name' ) as $var ) {
$key = array_search( $var, $query_vars );
if ( false !== $key ) {
unset( $query_vars[$key] );
}
}
}
return $query_vars;
}
Was es macht:
author=1
Wenn Sie Permalinks verwenden, bleiben die Archive des Autors erhalten. Auch wenn die URL ungefähr so lautet: Hier /dummy?author=1
wird nur die Seite für angezeigt /dummy
.
Dank der Antwort von Rarst auf diese Frage und https://perishablepress.com/stop-user-enumeration-wordpress/
Ich möchte meine eigene Vision posten:
RewriteCond %{REQUEST_URI} ^/$
RewriteCond %{QUERY_STRING} ^author= [NC]
RewriteRule (.*) $1? [L]
Erste Zeile erkennt nur Homepage. Ich erkläre warum. Diese Funktion "Benutzeraufzählung" funktioniert nur auf der Homepage, sodass nicht alle URLs neu geschrieben werden müssen.
Als nächstes suchen wir nach einer author=
Abfragezeichenfolge. Es ist offensichtlich.
Schließlich zeigen wir nur die Originalseite ohne Blöcke, Weiterleitungen (301, 302) oder Sperren (403). Sollte es sich nicht wie eine Seite mit einem anderen nutzlosen Parameter verhalten?