Kann ich das Aufzählen von Benutzernamen verhindern?

Kann ich die Aufzählung von Benutzernamen auf meiner WordPress-Seite verhindern? Ich kann Benutzer im Moment mit dem WPScan-Tool sehen.

Solutions Collecting From Web of "Kann ich das Aufzählen von Benutzernamen verhindern?"

Eine einfache Lösung, die ich in einem .htaccess :

 RewriteCond %{REQUEST_URI} !^/wp-admin [NC] RewriteCond %{QUERY_STRING} author=\d RewriteRule ^ - [L,R=403] 

Es ähnelt der Antwort von @ jptsetme, funktioniert aber auch, wenn die Abfragezeichenfolge /?dummy&author=5 ist und das Suchmuster für RewriteRule sehr schnell ist: In regulären Ausdrücken sehen Sie häufig eine Erfassung ([0-9]*) Dies. Es ist jedoch nicht notwendig, Speicher 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 author=1b akzeptieren möchten.

Update 20.04.2017

Ich sehe mehr “gebrochene” 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 auf Folgendes erweitern:

 RewriteCond %{REQUEST_URI} !^/wp-admin [NC] RewriteCond %{QUERY_STRING} ^author=\d+ [NC,OR] RewriteCond %{QUERY_STRING} ^author=\{num RewriteRule ^ - [L,R=403] 

Du kannst nicht.

Das WPScan-Tool ist ein automatisiertes Dienstprogramm, das die freundlichen 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 in der HTTP-Antwort, um einen Benutzernamen zu finden.

Unter http://mysite.url zum Beispiel …

WPScan überprüft http://mysite.url/?author=1 . Wenn Ihre Site hübsche Permalinks verwendet, wird eine 301-Weiterleitung mit einem Location Header von http://mysite.url/author/username . Wenn Ihre Site keine schönen Permalinks verwendet, wird stattdessen der Status 200 (OK) zurückgegeben, sodass WPScan den Feed auf die Zeichenfolge “posts by username” prüft und den Benutzernamen extrahiert.

Was du tun kannst

Vor allem, weil jemand Ihren Benutzernamen erraten kann, heißt das nicht, dass Ihre Website unsicher ist. Und Sie können wirklich niemanden daran hindern, Ihre Website auf diese Weise zu analysieren.

Jedoch …

Wenn Sie sich darüber Gedanken machen, würde ich Ihnen zwei Dinge empfehlen:

  1. Schalte hübsche Permalinks aus. Dies zwingt WPScan und ähnliche Tools dazu, den Inhalt Ihrer Site nach Nutzernamen zu analysieren, anstatt sich auf die URL zu verlassen.
  2. Erzwinge den Nutzern, einen anderen Nicknamen festzulegen. Wenn kein Benutzername in der URL vorhanden ist, suchen die Scan-Tools stattdessen im Feed / Post-Inhalt nach “Posts nach Benutzername”. Wenn Sie dort keine Benutzernamen eingeben, können diese nicht abgefragt werden.

Eine andere Alternative ist das Ändern des Autors permalink. Es gibt mehrere Möglichkeiten, dies zu tun, und Sie können wahrscheinlich auch einige auf dieser Seite finden .

Ich habe das nicht gründlich getestet, aber ich denke, es ist besser, die zugrunde liegende Ressource zu entfernen, anstatt zu versuchen, auf Web-Server-Ebene darum herum Wände zu bauen. In WP-Begriffen würde das also verhindern, dass authorbezogene Abfragevariablen verarbeitet werden.

 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 beachte, dass dadurch Autorenarchive vollständig gelöscht werden , die möglicherweise Paranoia Level sind oder nicht. 🙂

Sie können eine .htaccess-Rewrite-Regel verwenden, um diese Offenlegung zu verhindern. Sie sollten jedoch auch Spitznamen verwenden, um die Offenlegung von Benutzernamen in parsenbaren Inhalten zu vermeiden, wie von EAMann beschrieben.

Der folgende Blog beschreibt, wie man es macht, hat aber einen Tipperrors in der Umschreiberegel: http://www.question-defense.com/2012/03/20/blockwordpress-user-enumeration-secure-wordpress-against-hacking

Die richtige Regel sollte auch die Abfragezeichenfolge aus der umgeschriebenen URL entfernen, sonst geben Sie den Benutzernamen weiterhin frei. 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 arbeiten.

Ich wollte hinzufügen, dass Sie dies auch auf nginx tun können. Prüfen:
» WordPress User Enumeration auf nginx blockieren – http://www.edwidget.name

Als Nebenbemerkung wollte ich verhindern, dass der Benutzername auf meiner Seite mit WP Engine gehostet wird, was den Zugriff der Benutzer auf Low-Level-Nginx-Konfigurationsdateien einschränkt. Sie haben jedoch einen Abschnitt “Redirect Rules” in ihrem Control Panel, 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 Bedienfeld Advanced Settings anzeigen …

 Match args: author=([0-9]*) Rewrite type: 301 Permanent 

Et voila, deine Benutzernamen sind sicher [r]!

Ich habe die Benutzeraufzählung von WPScan vollständig blockiert, indem ich in htaccess Folgendes hinzufügte

 # 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 professionelle Meinung als Penetration Tester für eine Gov’t Agentur … es lohnt sich IMMER, die Aufzählung von Informationen über Ihre Website zu erschweren. Wenige von euch werden eine Webseite haben, die über die Google, Script Kiddie Hacker hinausgeht. Wir sprechen von mehrschichtiger Sicherheit und mit jeder Ebene fügen Sie einem Penetrationsversuch Zeit und Komplexität hinzu. Jede Ebene trägt außerdem zu den Fähigkeiten bei, die der Hacker benötigt. Es gibt ein paar wirklich gute Application Firewalls auf WP. Suchen Sie nach solchen, die IP-Adressen blockieren können, die wiederholte Benutzeranmeldeversuche oder 404 erfordern. Die Firewall soll IPs automatisch blockieren, die Ihre Website nach nicht vorhandenen Seiten durchsuchen oder versuchen, sich wiederholt auf Ihrer Website anzumelden. Eine gute function beinhaltet auch XSS und SQL Injection Blocking-functionen. Erwägen Sie, All-in-One-WP-Sicherheit von Tipps und Tricks HQ, Peter, Ruhul, Ivy. Es hat eine anständige Schnittstelle und Fähigkeiten für Anfänger und Experten gleichermaßen.

Anstelle der .htaccess Route können Sie auch die functions.php Ihres untergeordneten Themas um folgenden Code ergänzen:

 # 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 Standardautorenlinks, die zu dem Benutzername jeder Seite hinzugefügt werden, zu etwas anderem (wie der Homepage) ändern, indem Sie folgend verwenden:

 # 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 Post ist, aber für zukünftige Referenzen möchte ich auch meine Lösung hinzufügen. Dies ist nur ein Ausschnitt in die functions.php Ihres Themes. Es wird alles an seinem Platz belassen und funktionieren, sogar die Autorenarchive, aber es tötet die schlechten Aufzählungsanfragen ab.

 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:

  • Es scannt die URL nach etwas wie: author=1
  • Wenn es gefunden wird, wird die Autorenvariable aus der Abfrage vars entfernt, so dass sie nicht abgefragt wird.

Wenn Sie Permalinks verwenden, wird das Archiv des Autors in Takt bleiben. Wenn die URL etwa so aussieht: /dummy?author=1 wird nur die Seite für /dummy .

Dank der Antwort von Rarst auf diese Frage und https://perishablepress.com/stop-user-enumeration-wordpress/