Pot preveni enumerarea numelor de utilizatori în WordPress?

22 mar. 2012, 16:39:33
Vizualizări: 36.2K
Voturi: 35

Pot preveni enumerarea numelor de utilizatori pe site-ul meu WordPress? În prezent pot vedea utilizatorii folosind instrumentul WPScan.

1
Comentarii

Am creat un plugin pentru a umple această lacună îl găsiți pe Wordpress Plugins aici: http://wordpress.org/plugins/stop-user-enumeration/

user2412827 user2412827
20 aug. 2013 12:32:16
Toate răspunsurile la întrebare 9
0
30

O soluție simplă pe care o folosesc în .htaccess:

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

Este similară cu răspunsul lui @jptsetme, dar funcționează chiar și atunci când șirul de interogare este /?dummy&author=5, iar modelul de căutare pentru RewriteRule este foarte rapid: Adesea vezi o captură ([0-9]*) în expresiile regulate pentru aceasta. Dar nu este nevoie să irosești memorie pentru captură atunci când nu folosești expresia capturată, iar o potrivire pentru primul caracter este suficientă, deoarece nu vrei să accepți author=1b.

Actualizare 20.04.2017

Văd tot mai multe cereri "defecte" de la oameni care nici măcar nu sunt capabili să ruleze un simplu scan. URL-urile solicitate arată astfel:

/?author={num:2}

Așadar, ai putea extinde regula de mai sus la:

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

Nu poți.

Instrumentul WPScan este o unealtă automatizată care profită de URL-urile prietenoase ale WordPress pentru a determina numele de utilizator. Acesta va parcurge primele 10 ID-uri posibile pentru autori și va verifica antetul Location din răspunsul HTTP pentru a găsi un nume de utilizator.

Folosind http://mysite.url ca exemplu...

WPScan va verifica http://mysite.url/?author=1. Dacă site-ul tău folosește permalink-uri frumoase, acesta va returna o redirecționare 301 cu un antet Location de tipul http://mysite.url/author/username. Dacă site-ul tău nu folosește permalink-uri frumoase, va returna un status 200 (OK), așa că WPScan va verifica feed-ul pentru șirul "postări de către username" și va extrage numele de utilizator.

Ce poți face

În primul rând, faptul că cineva poate ghici numele tău de utilizator nu înseamnă că site-ul tău este nesigur. Și nu există nicio modalitate prin care să poți preveni pe cineva să analizeze site-ul tău în acest fel.

Totuși...

Dacă ești cu adevărat îngrijorat de acest lucru, aș recomanda să faci două lucruri:

  1. Dezactivează permalink-urile frumoase. Acest lucru va forța WPScan și alte instrumente similare să analizeze conținutul site-ului tău pentru nume de utilizator, în loc să se bazeze pe URL.
  2. Forțează utilizatorii să seteze un alt pseudonim. În absența unui nume de utilizator în URL, instrumentele de scanare vor căuta "postări de către username" în feed-ul/conținutul postărilor. Dacă nu afișezi nume de utilizator, atunci acestea nu pot fi obținute.

O altă alternativă este să modifici rescrierile permalink-urilor pentru autori. Există mai multe modalități prin care poți face acest lucru și probabil că poți găsi câteva pe acest site de asemenea.

22 mar. 2012 17:41:45
0

Nu am testat acest lucru în detaliu, dar cred că este preferabil să eliminăm resursele subiacente decât să încercăm să construim ziduri în jurul lor la nivel de server web. Deci, în termeni de WordPress, asta ar însemna să oprim procesarea variabilelor de interogare legate de autor.

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: rețineți că acest lucru va elimina complet arhivele autorilor, ceea ce poate sau nu poate fi un nivel adecvat de paranoia :)

18 ian. 2014 11:38:33
0

Puteți folosi o regulă de rescriere .htaccess pentru a preveni această expunere, dar ar trebui să vă asigurați și că utilizați porecle pentru a evita dezvăluirea numelor de utilizator în conținut analizabil, așa cum este descris de EAMann.

Următorul blog descrie cum să faceți acest lucru, dar conține o greșeală de tipar în regula de rescriere: http://www.question-defense.com/2012/03/20/block-wordpress-user-enumeration-secure-wordpress-against-hacking

Regula corectă ar trebui să elimine și șirul de interogare din URL-ul rescris, altfel veți expune în continuare numele de utilizator. Ar trebui să arate astfel:

# Opriți vulnerabilitatea de enumerare a numelor de utilizator WordPress
RewriteCond %{REQUEST_URI}  ^/$
RewriteCond %{QUERY_STRING} ^/?author=([0-9]*)
RewriteRule ^(.*)$ http://yoursite.com/somepage/? [L,R=301]

Funcționează bine pentru noi.

22 mar. 2013 05:08:17
0

Am vrut să adaug că poți face asta și pe nginx. Verifică:
» Blocarea Enumerării Utilizatorilor WordPress pe nginx - www.edwidget.name

Ca o observație suplimentară, am vrut să împiedic enumerarea numelor de utilizator pe site-ul meu găzduit cu WP Engine, care limitează accesul utilizatorilor la fișierele de configurare de nivel scăzut ale nginx. Cu toate acestea, ei au o secțiune "Reguli de Redirecționare" în panoul de control care vă permite să realizați acest lucru. După ceva timp, am reușit să găsesc cea mai bună configurație:

Nume Redirecționare: // alegeți o descriere pentru rescriere
Domeniu: // *trebuie* să selectați un domeniu; "Toate Domeniile" *nu* va funcționa aici!
Sursă: ^/$
Destinație: /?

Apoi trebuie să afișați panoul Setări Avansate...

Potrivire argumente: author=([0-9]*)
Tip Rescriere: 301 Permanentă

Și voila, numele de utilizator sunt mai în siguranță!

4 nov. 2013 00:28:48
0

Am blocat complet enumerarea utilizatorilor de către WPScan prin adăugarea următoarelor reguli în 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]

Opinia mea profesională ca tester de penetrare pentru o agenție guvernamentală... este ÎNTOTDEAUNA valabil să faci mai dificilă enumerarea informațiilor despre site-ul tău. Puțini dintre voi veți avea un site care depășește nivelul hackerilor de tip script kiddie sau Google. Vorbim despre securitate stratificată, unde fiecare strat adaugă timp și complexitate unei încercări de penetrare. Fiecare strat mărește și setul de abilități necesare hackerului. Există câteva firewall-uri de aplicație foarte bune disponibile pentru WordPress. Căutați cele care pot bloca adresele IP care au încercări repetate de autentificare sau generează erori 404. Ideea este ca firewall-ul vostru să blocheze automat IP-urile care scanează site-ul pentru pagini inexistente sau încearcă să se conecteze în mod repetat. O caracteristică bună include și capabilități de blocare a XSS și SQL Injection. Luați în considerare utilizarea plugin-ului All In One WP Security de la Tips and Tricks HQ, Peter, Ruhul, Ivy. Are o interfață decentă și un set de funcționalități potrivite atât pentru începători, cât și pentru experți.

15 aug. 2015 00:26:42
0

În loc de ruta .htaccess, o altă alternativă este să adăugați următorul cod în functions.php al temei child:

# Redirecționează pagina autorului către pagina principală
add_action( 'template_redirect', 'wpse_46469_author_page' );

function wpse_46469_author_page() {
    # Dacă se accesează pagina de arhivă a autorului, redirecționează către pagina principală
    if ( is_author() ) {
        wp_safe_redirect( get_home_url(), 301 );
        exit;
    }
}

În plus, puteți modifica link-urile implicite ale autorului care sunt adăugate la numele de utilizator al fiecărei pagini în altceva (cum ar fi pagina principală), folosind următoarele:

# Înlocuiește URL-ul autorului cu pagina principală
add_filter( 'author_link', 'wpse_46469_author_link' ); 

function wpse_46469_author_link() {
    # Returnează URL-ul paginii principale
    return home_url();
}
19 oct. 2016 21:43:42
0

Știu că acesta este un post vechi, dar pentru referințe viitoare, aș dori să adaug și soluția mea. Acesta este doar un fragment de cod de introdus în fișierul functions.php al temei dumneavoastră. Va lăsa totul la locul lui și funcțional, inclusiv arhivele autorilor, dar va elimina cererile nedorite de enumerare.

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

Ce face:

  • scanează URL-ul pentru ceva de genul: author=1
  • Când este găsit, va elimina variabila autor din variabilele de interogare, astfel încât să nu fie utilizată în interogare.

Dacă utilizați permalink-uri, acest cod va păstra arhivele autorilor intacte. De asemenea, dacă URL-ul va fi ceva de genul: /dummy?author=1, acesta va afișa doar pagina pentru /dummy.

Mulțumiri răspunsului lui Rarst la această întrebare și https://perishablepress.com/stop-user-enumeration-wordpress/

8 feb. 2017 16:02:02
1

Vreau să îmi expun propria viziune:

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

Prima linie detectează doar pagina de start. Voi explica de ce. Această funcționalitate de "enumerare a utilizatorilor" funcționează doar pe pagina principală, deci nu este nevoie să rescriem toate URL-urile.

Apoi căutăm șirul de interogare author=. Este evident.

În final, afișăm doar pagina originală fără blocări, redirecționări (301, 302) sau interdicții (403). Nu ar trebui să se comporte ca o pagină cu orice alt parametru inutil?

19 iun. 2019 19:13:53
Comentarii

Prin direcționarea doar către pagina principală, lăsați index.php în afara scopului, astfel încât enumerarea rămâne posibilă.

guidod guidod
20 oct. 2023 12:36:09