Kann ich die Aufzählung von Benutzernamen verhindern?

33

Kann ich die Aufzählung von Benutzernamen auf meiner WordPress-Site verhindern? Ich kann im Moment Benutzer sehen, die das WPScan-Tool verwenden.

urok93
quelle
Ich habe ein Plugin erstellt, um dieses Loch zu füllen. Finde es in den Wordpress-Plugins hier: wordpress.org/plugins/stop-user-enumeration
user2412827

Antworten:

26

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=5und das Suchmuster für RewriteRulesehr 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]
fuxia
quelle
13

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 LocationHeader der HTTP-Antwort, um einen Benutzernamen zu finden.

Verwenden Sie http://mysite.urlzum Beispiel ...

WPScan prüft http://mysite.url/?author=1. Wenn Ihre Site hübsche Permalinks verwendet, wird eine 301-Weiterleitung mit dem LocationHeader "" 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.

Was du tun kannst

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:

  1. Schalte hübsche Permalinks aus. Dadurch werden WPScan und ähnliche Tools gezwungen, den Inhalt Ihrer Website nach Benutzernamen zu durchsuchen, anstatt sich auf die URL zu verlassen.
  2. Erzwingen Sie, dass Benutzer einen anderen Kurznamen festlegen. Wenn die URL keinen Benutzernamen enthält, suchen die Scan-Tools stattdessen im Feed / Post-Inhalt nach "Posts nach Benutzernamen". Wenn Sie keine Benutzernamen veröffentlichen, können Sie diese nicht finden.

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 .

EAMann
quelle
4

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 :)

Rarst
quelle
3

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.

jptsetme
quelle
2

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 SettingsPanel anzeigen ...

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

Et voila, deine Benutzernamen sind sicher!

cfx
quelle
0

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.

Walter
quelle
0

Anstelle der .htaccessRoute 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();
}
Ethan Jinks O'Sullivan
quelle
0

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.phpaus 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:

  • Es durchsucht die URL nach etwas wie: author=1
  • Wenn es gefunden wird, wird die Autorenvariable aus den Abfragevariablen entfernt, damit es nicht abgefragt wird.

Wenn Sie Permalinks verwenden, bleiben die Archive des Autors erhalten. Auch wenn die URL ungefähr so ​​lautet: Hier /dummy?author=1wird nur die Seite für angezeigt /dummy.

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

leendertvb
quelle
0

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?

vladkras
quelle