Puis-je empêcher l'énumération des noms d'utilisateur?

32

Puis-je empêcher l'énumération des noms d'utilisateur sur mon site wordpress? Je peux voir les utilisateurs en ce moment à l'aide de l'outil WPScan.

    
posée urok93 22.03.2012 - 15:39
la source

8 réponses

25

Une solution simple que j'utilise dans un .htaccess :

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

Cela ressemble à la réponse de @ jptsetme, mais cela fonctionne même lorsque la chaîne de requête est /?dummy&author=5 et que le modèle de recherche de RewriteRule est très rapide: vous voyez souvent une capture ([0-9]*) dans les expressions rationnelles. Mais il n’est pas nécessaire de gaspiller de la mémoire pour la capture lorsque vous n’utilisez pas l’expression capturée, et une correspondance pour le premier caractère suffit, car vous ne souhaitez pas accepter author=1b .

Mise à jour du 20.04.2017

Je vois de plus en plus de requêtes "cassées" de personnes qui sont même trop stupides pour exécuter une analyse simple. Les URL demandées se présentent comme suit:

/?author={num:2}

Vous pouvez donc étendre la règle ci-dessus à:

RewriteCond %{REQUEST_URI} !^/wp-admin [NC]
RewriteCond %{QUERY_STRING} ^author=\d+ [NC,OR]
RewriteCond %{QUERY_STRING} ^author=\{num 
RewriteRule ^ - [L,R=403]
    
réponse donnée fuxia 17.01.2014 - 17:59
la source
12

Vous ne pouvez pas.

L'outil WPScan est un utilitaire automatisé qui tire parti des URL conviviales de WordPress pour déterminer les noms d'utilisateur. Il va parcourir en boucle les 10 premiers identifiants possibles pour les auteurs et vérifiez l'en-tête Location sur la réponse HTTP pour trouver un nom d'utilisateur.

Utilisation de http://mysite.url par exemple ...

WPScan vérifiera http://mysite.url/?author=1 . Si votre site utilise de jolis permaliens, il renverra une redirection 301 avec un en-tête Location de http://mysite.url/author/username . Si votre site n'utilise pas de jolis permaliens, il retournera l'état 200 (OK). WPScan recherchera dans le fil la chaîne "posts by username" et extraira le nom d'utilisateur.

Ce que vous pouvez faire

Tout d'abord, le simple fait que quelqu'un devine votre nom d'utilisateur ne signifie pas que votre site n'est pas sécurisé. Et vous ne pouvez vraiment pas empêcher quelqu'un d'analyser votre site de cette façon.

Cependant ...

Si cela vous préoccupe vraiment, je vous recommanderais de faire deux choses:

  1. Désactivez les jolis liens permanents. Ceci forcera WPScan et des outils similaires à analyser le contenu de votre site pour les noms d'utilisateur plutôt que de s'appuyer sur l'URL.
  2. Forcer les utilisateurs à définir un pseudonyme différent. En l'absence de nom d'utilisateur dans l'URL, les outils d'analyse rechercheront plutôt "publications par nom d'utilisateur" dans le contenu du flux / publication. Si vous ne nommez pas d'utilisateurs, ils ne peuvent pas être interceptés.

Une autre alternative consiste à modifier les réécritures permanentes de vos auteurs. Vous pouvez le faire de plusieurs manières et vous pouvez probablement en trouver quelques-unes sur ce site .

    
réponse donnée EAMann 22.03.2012 - 16:41
la source
4

Je n'ai pas testé cela à fond, mais je pense qu'il est préférable de supprimer la ressource sous-jacente plutôt que d'essayer de construire des murs autour d'elle au niveau du serveur Web. Donc, en termes de WP, cela l’empêcherait de traiter les variables de requête liées aux auteurs.

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 remarque que cela va tuer les archives de l'auteur entièrement , ce qui peut ou non correspondre au niveau de paranoïa approprié:)

    
réponse donnée Rarst 18.01.2014 - 10:38
la source
3

Vous pouvez utiliser une règle de réécriture .htaccess pour empêcher cette divulgation, mais vous devez également vous assurer d'utiliser des pseudonymes pour éviter de divulguer les noms d'utilisateurs dans le contenu analysable, comme décrit par EAMann.

Le blog suivant décrit comment procéder, mais comporte une faute de frappe dans la règle de réécriture: enlace

La règle correcte doit également supprimer la chaîne de requête de l'URL réécrite, sinon vous devrez toujours divulguer le nom d'utilisateur. Cela devrait ressembler à ceci:

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

Travaille bien pour nous.

    
réponse donnée jptsetme 22.03.2013 - 04:08
la source
2

Je voulais ajouter que vous pouvez également le faire sur nginx. Contrôle:
» Blocage de l'énumération d'utilisateurs WordPress sur nginx - www.edwidget.name

En guise de remarque, je souhaitais éviter toute énumération de noms d'utilisateur sur mon site hébergé avec WP Engine, ce qui limite l'accès des utilisateurs aux fichiers de configuration nginx de bas niveau. Ils ont cependant une section "Règles de redirection" dans leur panneau de configuration qui vous permet d'accomplir cela. Après un certain temps, j'ai réussi à trouver la meilleure configuration:

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

Ensuite, vous devez afficher le panneau Advanced Settings ...

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

Et voila, vos noms d'utilisateur sont en sécurité [r]!

    
réponse donnée cfx 03.11.2013 - 23:28
la source
0

J'ai complètement bloqué l'énumération des utilisateurs de WPScan en ajoutant les éléments suivants dans 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]

Mon opinion professionnelle en tant que testeur de pénétration pour une agence gouvernementale ... il est TOUJOURS intéressant de rendre plus difficile l'énumération d'informations sur votre site Web. Peu d’entre vous auront un site Web qui dépasse les google, script kiddie hackers. Nous parlons de sécurité par couches et chaque couche ajoute du temps et de la complexité à une tentative de pénétration. Chaque couche ajoute également aux compétences requises du pirate informatique. Il existe quelques très bons pare-feu d'applications disponibles sur WP. Recherchez ceux qui peuvent bloquer les adresses IP qui ont des tentatives de connexion répétées ou 404. L'idée est que votre pare-feu bloque automatiquement les adresses IP qui analysent votre site Web pour rechercher des pages inexistantes ou qui tentent de se connecter à plusieurs reprises à votre site. Une bonne fonctionnalité inclut également des fonctionnalités de blocage d'injection XSS et SQL. Pensez à utiliser la sécurité All In One WP de QG Tips and Tricks, Peter, Ruhul, Ivy. Il possède une interface et des fonctionnalités décentes pour les novices et les experts.

    
réponse donnée Walter 14.08.2015 - 23:26
la source
0

Au lieu de .htaccess route, une autre alternative consiste à ajouter le code suivant à functions.php de votre thème enfant:

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

De plus, vous pouvez modifier les liens d'auteur par défaut ajoutés au nom d'utilisateur de chaque page en un autre élément (tel que la page d'accueil), en utilisant les éléments suivants:

# 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();
}
    
réponse donnée Ethan Jinks O'Sullivan 19.10.2016 - 20:43
la source
0

Je sais que cet article est ancien, mais pour les références futures, j'aimerais également ajouter ma solution. Ce n'est qu'un extrait à insérer dans le functions.php de votre thème. Il laissera tout en place et fonctionnera, même les archives de l'auteur, mais éliminera les mauvaises requêtes d'énumération.

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

Qu'est-ce qu'il fait:

  • il scanne l'URL pour quelque chose comme: author=1
  • Une fois trouvé, il supprimera la variable auteur des vars de la requête pour éviter toute interrogation.

Si vous utilisez des liens permanents, les archives de l'auteur resteront intactes. De plus, si l'URL ressemble à ceci: /dummy?author=1 , cela affichera simplement la page pour /dummy .

Merci à la réponse de Rarst à cette question et à enlace

    
réponse donnée leendertvb 08.02.2017 - 15:02
la source

Lire d'autres questions sur les étiquettes