Posso impedire l'enumerazione dei nomi utente?


33

Posso impedire l'enumerazione dei nomi utente sul mio sito wordpress? Al momento riesco a vedere gli utenti usando lo strumento WPScan.


Ho creato un plug-in per riempire questo buco,
trovalo

Risposte:


26

Una soluzione semplice che uso in un .htaccess:

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

È simile alla risposta di @ jptsetme, ma funziona anche quando la stringa di query è /?dummy&author=5e il modello di ricerca RewriteRuleè molto veloce: per questo spesso si vede una cattura ([0-9]*)nelle espressioni regolari. Ma non è necessario sprecare memoria per l'acquisizione quando non si utilizza l'espressione catturata e una corrispondenza per il primo personaggio è sufficiente, perché non si desidera accettare author=1b.

Aggiornamento 20.04.2017

Sto vedendo più richieste "rotte" da parte di persone che sono persino troppo stupide per eseguire una semplice scansione. Gli URL richiesti si presentano così:

/?author={num:2}

Quindi puoi estendere la regola sopra a:

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

13

Non puoi.

Lo strumento WPScan è un'utilità automatizzata che sfrutta gli URL intuitivi di WordPress per determinare i nomi utente. Passerà in rassegna i primi 10 ID possibili per gli autori e controllerà l' Locationintestazione sulla risposta HTTP per trovare un nome utente.

Usando http://mysite.urlad esempio ...

WPScan verificherà http://mysite.url/?author=1. Se il tuo sito utilizza abbastanza permalink, restituirà un reindirizzamento 301 con Locationun'intestazione di http://mysite.url/author/username. Se il tuo sito non utilizza abbastanza permalink, restituirà invece lo stato 200 (OK), quindi WPScan verificherà nel feed la stringa "post per nome utente" ed estrarrà il nome utente.

Cosa puoi fare

Prima di tutto, solo perché qualcuno può indovinare il tuo nome utente, non significa che il tuo sito sia insicuro. E davvero non puoi impedire a qualcuno di analizzare il tuo sito in questo modo.

Tuttavia ...

Se sei davvero preoccupato per questo, ti consiglio di fare due cose:

  1. Disattiva i permalink. Ciò costringerà WPScan e strumenti simili a analizzare il contenuto del tuo sito per i nomi utente anziché fare affidamento sull'URL.
  2. Forza gli utenti a impostare un nickname diverso. In assenza di un nome utente nell'URL, gli strumenti di scansione cercheranno invece "post per nome utente" nel contenuto feed / post. Se non stai inserendo nomi utente, non possono essere catturati.

Un'altra alternativa è quella di cambiare il tuo autore permalink riscrive. Esistono diversi modi per farlo, e probabilmente ne troverai alcuni anche su questo sito .


4

Non lo ho testato a fondo, ma penso che sia preferibile rimuovere le risorse sottostanti piuttosto che provare a costruire muri attorno a esso a livello di server web. Quindi, in termini di WP, ciò impedirebbe di elaborare le variabili di query relative all'autore.

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 nota che questo ucciderà del tutto gli archivi degli autori , che potrebbero essere o non essere appropriati livello di paranoia :)


3

È possibile utilizzare una regola di riscrittura .htaccess per impedire questa divulgazione, ma si dovrebbe anche essere sicuri di utilizzare i soprannomi per evitare di rivelare nomi utente in contenuto analizzabile come descritto da EAMann.

Il seguente blog descrive come farlo ma ha un refuso nella regola di riscrittura: http://www.question-defense.com/2012/03/20/block-wordpress-user-enumeration-secure-wordpress-against-hacking

La regola corretta dovrebbe anche rimuovere la stringa di query dall'URL riscritto, altrimenti continuerai a rivelare il nome utente. Dovrebbe sembrare come questo:

# Stop wordpress username enumeration vulnerability
RewriteCond %{REQUEST_URI}  ^/$
RewriteCond %{QUERY_STRING} ^/?author=([0-9]*)
RewriteRule ^(.*)$ http://yoursite.com/somepage/? [L,R=301]

Funziona bene per noi.


2

Volevo aggiungere che puoi farlo anche su nginx. Controlla:
» Blocco dell'enumerazione degli utenti di WordPress su nginx - www.edwidget.name

Come nota a margine, volevo impedire l'enumerazione dei nomi utente sul mio sito ospitato con WP Engine, che limita l'accesso degli utenti ai file di configurazione nginx di basso livello. Tuttavia, hanno una sezione "Regole di reindirizzamento" nel loro pannello di controllo che ti consente di ottenere questo risultato. Dopo qualche tempo sono riuscito a capire la migliore configurazione:

Redirect Name: // choose a description for the rewrite
Domain: // you *must* select a domain; "All Domains" will *not* work here!
Source: ^/$
Destination: /?

Quindi devi mostrare il Advanced Settingspannello ...

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

Et voilà, i tuoi nomi utente sono al sicuro [r]!


0

Ho completamente bloccato l'enumerazione degli utenti da WPScan aggiungendo quanto segue in htaccess

# 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]

La mia opinione professionale come tester di penetrazione per un'agenzia governativa ... è SEMPREvale la pena rendere più difficile enumerare le informazioni sul tuo sito web. Pochi di voi avranno un sito Web che si eleva al di sopra di google, script kiddie hacker. Stiamo parlando di sicurezza a più livelli e, con ogni livello, aggiungi tempo e complessità a un tentativo di penetrazione. Ogni livello si aggiunge anche allo skillset richiesto dall'hacker. Ci sono alcuni firewall applicativi davvero buoni disponibili su WP. Cerca quelli che possono bloccare gli indirizzi IP che hanno ripetuti tentativi di accesso dell'utente o 404. L'idea è che il tuo firewall blocchi automaticamente gli IP che scansionano il tuo sito Web alla ricerca di pagine inesistenti o tentano di accedere ripetutamente al tuo sito. Una buona funzionalità include anche funzionalità di blocco dell'iniezione XSS e SQL. Prendi in considerazione l'utilizzo di All In One WP Security da Tips and Tricks HQ, Peter, Ruhul, Ivy.


0

Invece del .htaccesspercorso, un'altra alternativa è quella di aggiungere il seguente codice ai temi di tuo figlio 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;
    }
}

Inoltre, è possibile modificare i collegamenti predefiniti dell'autore aggiunti al nome utente di ciascuna pagina in qualcos'altro (come la homepage), utilizzando quanto segue:

# 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();
}

0

So che questo è un vecchio post, ma per riferimenti futuri vorrei aggiungere anche la mia soluzione. Questo è solo uno snippet da inserire nel functions.phptuo tema. Lascia tutto al suo posto e funzionante, anche gli archivi dell'autore, ma elimina le cattive richieste di enumerazione.

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;
}

Cosa fa:

  • esegue la scansione dell'URL per qualcosa come: author=1
  • Una volta trovata, rimuoverà la variabile dell'autore dai parametri della query in modo che non venga interrogata.

Se usi permalink, questo lascerà intatto l'archivio dell'autore. Inoltre, se l'URL sarà simile a /dummy?author=1questo : questo mostrerà solo la pagina per /dummy.

Grazie alla risposta di Rarst a questa domanda e https://perishablepress.com/stop-user-enumeration-wordpress/


0

Voglio pubblicare la mia visione:

RewriteCond %{REQUEST_URI} ^/$
RewriteCond %{QUERY_STRING} ^author= [NC]
RewriteRule (.*) $1? [L]

La prima riga rileva solo la home page. Spiegherò perché. Questa funzione di "enumerazione utente" funziona solo sulla home page, quindi non è necessario riscrivere tutti gli URL.

Quindi cerchiamo la author=stringa di query. È ovvio.

Infine, mostriamo solo la pagina originale senza blocchi, reindirizzamenti (301, 302) o divieti (403). Non dovrebbe comportarsi come una pagina con altri parametri inutili?

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.