Come Impedire l'Enumerazione degli Username?

22 mar 2012, 16:39:33
Visualizzazioni: 36.2K
Voti: 35

È possibile impedire l'enumerazione degli username sul mio sito WordPress? Al momento riesco a vedere gli utenti utilizzando lo strumento WPScan.

1
Commenti

Ho creato un plugin per colmare questa lacuna trovalo sui plugin WordPress qui: http://wordpress.org/plugins/stop-user-enumeration/

user2412827 user2412827
20 ago 2013 12:32:16
Tutte le risposte alla domanda 9
0
30

Una soluzione semplice che utilizzo in un file .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 query string è /?dummy&author=5, e il modello di ricerca per RewriteRule è molto veloce: spesso si vede una cattura ([0-9]*) nelle espressioni regolari per questo. Ma non c'è bisogno di sprecare memoria per la cattura quando non si utilizza l'espressione catturata, e una corrispondenza per il primo carattere è sufficiente, perché non si vuole 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 appaiono così:

/?author={num:2}

Quindi potresti estendere la regola sopra con:

RewriteCond %{REQUEST_URI} !^/wp-admin [NC]
RewriteCond %{QUERY_STRING} ^author=\d+ [NC,OR]
RewriteCond %{QUERY_STRING} ^author=\{num 
RewriteRule ^ - [L,R=403]
17 gen 2014 18:59:13
0
13

Non puoi.

Lo strumento WPScan è un'utilità automatizzata che sfrutta gli URL amichevoli di WordPress per determinare i nomi utente. Esegue un ciclo tra i primi 10 ID possibili per gli autori e controlla l'intestazione Location nella risposta HTTP per trovare un nome utente.

Utilizzando ad esempio http://miosito.url ...

WPScan verificherà http://miosito.url/?author=1. Se il tuo sito utilizza i permalink ottimizzati, restituirà un reindirizzamento 301 con un'intestazione Location di http://miosito.url/author/nomeutente. Se il tuo sito non utilizza i permalink ottimizzati, restituirà invece uno stato 200 (OK), quindi WPScan controllerà il feed alla ricerca della stringa "articoli di nomeutente" ed estrarrà il nome utente.

Cosa puoi fare

Innanzitutto, il fatto che qualcuno possa indovinare il tuo nome utente non significa che il tuo sito sia insicuro. E non c'è davvero alcun modo per impedire a qualcuno di analizzare il tuo sito in questo modo.

Tuttavia ...

Se sei veramente preoccupato per questo, consiglierei di fare due cose:

  1. Disattiva i permalink ottimizzati. Questo costringerà WPScan e strumenti simili a analizzare il contenuto del tuo sito per i nomi utente anziché affidarsi all'URL.
  2. Obbliga gli utenti a impostare un nickname diverso. In assenza di un nome utente nell'URL, gli strumenti di scansione cercheranno "articoli di nomeutente" nel feed/contenuto del post. Se non pubblichi i nomi utente, non potranno essere catturati.

Un'altra alternativa è modificare le regole di riscrittura dei permalink degli autori. Ci sono diversi modi per farlo, e probabilmente puoi trovare alcuni anche su questo sito.

22 mar 2012 17:41:45
0

Non ho testato approfonditamente questa soluzione, ma penso sia preferibile rimuovere la risorsa sottostante piuttosto che cercare di costruire barriere attorno ad essa a livello di server web. Quindi in termini WordPress, significherebbe impedire l'elaborazione delle variabili di query relative agli autori.

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 eliminerà completamente gli archivi degli autori, il che potrebbe essere o meno un livello di paranoia appropriato :)

18 gen 2014 11:38:33
0

Puoi utilizzare una regola di riscrittura .htaccess per prevenire questa divulgazione, ma dovresti anche assicurarti di utilizzare soprannomi per evitare di rivelare i nomi utente in contenuti analizzabili come descritto da EAMann.

Il seguente blog descrive come farlo ma contiene un errore di battitura 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 il nome utente verrà comunque rivelato. Dovrebbe essere così:

# Blocca la vulnerabilità di enumerazione degli utenti in WordPress
RewriteCond %{REQUEST_URI}  ^/$
RewriteCond %{QUERY_STRING} ^/?author=([0-9]*)
RewriteRule ^(.*)$ http://yoursite.com/somepage/? [L,R=301]

Funziona bene per noi.

22 mar 2013 05:08:17
0

Volevo aggiungere che puoi farlo anche su nginx. Dai un'occhiata:
» Bloccare l'enumerazione degli utenti in WordPress su nginx - www.edwidget.name

Come nota a margine, volevo prevenire l'enumerazione degli username sul mio sito ospitato con WP Engine, che limita l'accesso degli utenti ai file di configurazione di basso livello di nginx. Tuttavia, hanno una sezione "Regole di reindirizzamento" nel loro pannello di controllo che ti permette di ottenere questo risultato. Dopo un po' di tempo sono riuscito a trovare la configurazione migliore:

Nome del reindirizzamento: // scegli una descrizione per la riscrittura
Dominio: // *devi* selezionare un dominio; "Tutti i domini" *non* funzionerà qui!
Sorgente: ^/$
Destinazione: /?

Poi devi mostrare il pannello Impostazioni avanzate...

Argomenti da abbinare: author=([0-9]*)
Tipo di riscrittura: 301 Permanente

Et voilà, i tuoi username sono più al sicuro!

4 nov 2013 00:28:48
0

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

# Blocca la vulnerabilità di enumerazione username in WordPress
RewriteCond %{REQUEST_URI}  ^/$
RewriteCond %{QUERY_STRING} ^/?author=([0-9]*)
RewriteRule ^(.*)$ http://tuodominio.com [L,R=301]
RewriteCond %{QUERY_STRING} author=d
RewriteRule ^ /? [L,R=301]

La mia opinione professionale come penetration tester per un'agenzia governativa... è SEMPRE utile rendere più difficile l'enumerazione delle informazioni sul tuo sito web. Pochi di voi avranno un sito che attirerà l'attenzione di hacker esperti come Google o script kiddie. Stiamo parlando di sicurezza a strati e con ogni strato, aggiungi tempo e complessità a un tentativo di penetrazione. Ogni strato aumenta anche le competenze richieste all'hacker. Ci sono alcuni firewall per applicazioni davvero validi disponibili per WP. Cerca quelli che possono bloccare gli indirizzi IP che hanno tentativi ripetuti di login utente o 404. L'idea è che il tuo firewall blocchi automaticamente gli IP che scansionano il tuo sito alla ricerca di pagine inesistenti o tentano ripetutamente di accedere al tuo sito. Una buona funzionalità include anche capacità di blocco per XSS e SQL Injection. Considera l'uso di All In One WP Security di Tips and Tricks HQ, Peter, Ruhul, Ivy. Ha un'interfaccia decente e un set di funzionalità adatto sia ai principianti che agli esperti.

15 ago 2015 00:26:42
0

Invece della soluzione con .htaccess, un'alternativa è aggiungere il seguente codice al file functions.php del tuo child theme:

# Reindirizza la pagina autore alla homepage
add_action( 'template_redirect', 'wpse_46469_author_page' );

function wpse_46469_author_page() {
    # Se si sta accedendo alla pagina archivio autore, reindirizza alla homepage
    if ( is_author() ) {
        wp_safe_redirect( get_home_url(), 301 );
        exit;
    }
}

Inoltre, puoi modificare i link autore predefiniti che vengono aggiunti al nome utente in ogni pagina sostituendoli con altro (come la homepage), utilizzando il seguente codice:

# Sostituisce l'URL autore con la homepage
add_filter( 'author_link', 'wpse_46469_author_link' ); 

function wpse_46469_author_link() {
    # Restituisce l'URL della homepage
    return home_url();
}
19 ott 2016 21:43:42
0

So che questo è un vecchio post, ma per future referenze vorrei aggiungere anche la mia soluzione. Questo è solo uno snippet da inserire nel file functions.php del tuo tema. Lascerà tutto al suo posto e funzionante, anche gli archivi degli autori, ma eliminerà le richieste di enumerazione indesiderate.

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:

  • analizza l'URL cercando qualcosa come: author=1
  • Quando trovato, rimuoverà la variabile author dalle query vars così non verrà interrogata.

Se usi i permalink, questo lascerà intatti gli archivi degli autori. Inoltre, se l'URL sarà qualcosa come: /dummy?author=1 questo mostrerà semplicemente la pagina per /dummy.

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

8 feb 2017 16:02:02
1

Voglio condividere la mia visione:

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

La prima riga rileva solo la homepage. Spiego il perché. Questa funzionalità di "user-enumeration" funziona solo sulla homepage, quindi non c'è bisogno di riscrivere tutti gli URL.

Poi cerchiamo la stringa di query author=. Questo è ovvio.

Infine, mostriamo semplicemente la pagina originale senza alcun blocco, reindirizzamenti (301, 302) o ban (403). Non dovrebbe comportarsi come una pagina con qualsiasi altro parametro inutile?

19 giu 2019 19:13:53
Commenti

Concentrandoti solo sulla homepage stai escludendo index.php, quindi l'enumerazione è ancora possibile.

guidod guidod
20 ott 2023 12:36:09