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


Réponses:


26

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 le motif de recherche RewriteRuleest très rapide: vous voyez souvent une capture ([0-9]*)dans des expressions régulières pour cela. Toutefois, 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 20.04.2017

Je vois plus de demandes "brisées" de personnes qui sont même trop stupides pour exécuter un simple scan. Les URL demandées ressemblent à ceci:

/?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]

13

Tu ne peux 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 les 10 premiers identifiants possibles pour les auteurs et vérifier l'en- Locationtête de la réponse HTTP pour trouver un nom d'utilisateur.

En utilisant http://mysite.urlpar exemple ...

WPScan vérifiera http://mysite.url/?author=1. Si votre site utilise de jolis permaliens, il renverra une redirection 301 avec un en- Locationtête 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 flux la chaîne "posts by username" et extraira le nom d'utilisateur.

Ce que tu peux faire

Tout d'abord, ce n'est pas parce que quelqu'un peut deviner votre nom d'utilisateur que votre site n'est pas sécurisé. Et il n'y a vraiment aucun moyen d'empêcher quelqu'un d'analyser votre site de cette manière.

Toutefois ...

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

  1. Désactivez les jolis permaliens. Cela 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 "messages par nom d'utilisateur" dans le contenu du flux / publication. Si vous ne nommez pas d'utilisateurs, vous ne pouvez pas les attraper.

Une autre alternative est de changer les réécritures de votre auteur en permalien. Vous pouvez le faire de plusieurs manières et vous en trouverez probablement aussi quelques-unes sur ce site .


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 des variables de requête liées à l’auteur.

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 note que cela va tuer complètement les archives de l'auteur , ce qui peut être ou non le niveau de paranoïa approprié :)


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'utilisateur 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: http://www.question-defense.com/2012/03/20/block-wordpress-user-enumeration-secure-wordpress-against-hacking

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

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

Travailler bien pour nous.


2

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

En guise de remarque, je voulais empêcher l'énumération des 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 montrer le Advanced Settingspanneau ...

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

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


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 ... c'est TOUJOURSCela rend plus difficile d’énumérer les 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é en couches et avec chaque couche, vous ajoutez 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 ayant 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 à la recherche de pages inexistantes ou qui tentent de se connecter de manière répétée à votre site. Une bonne fonctionnalité inclut également les 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.


0

Au lieu de la .htaccessroute, une autre alternative consiste à ajouter le code suivant à votre thème enfant 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;
    }
}

En outre, vous pouvez remplacer les liens d'auteur par défaut ajoutés au nom d'utilisateur de chaque page par un autre élément (tel que la page d'accueil), en procédant comme suit:

# 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

Je sais que ceci est un ancien post, mais pour les références futures, j'aimerais également ajouter ma solution. Ceci est seulement un extrait à mettre dans le functions.phpthème. Il laissera tout en place et fonctionnera, même les archives de l'auteur, mais éliminera les mauvaises requêtes de recensement.

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 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 afin de ne pas l'interroger.

Si vous utilisez des liens permanents, les archives de l'auteur resteront intactes. Aussi, si l'URL sera quelque chose comme: /dummy?author=1ceci affichera juste la page pour /dummy.

Grâce à la réponse de Rarst à cette question et à https://perishablepress.com/stop-user-enumeration-wordpress/


0

Je veux poster ma propre vision:

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

La première ligne détecte uniquement la page d'accueil. Je vais expliquer pourquoi. Cette fonctionnalité "énumération d'utilisateur" fonctionne uniquement sur la page d'accueil, il n'est donc pas nécessaire de réécrire toutes les URL.

Ensuite, nous recherchons une author=chaîne de requête. C'est évident.

Enfin, nous montrons simplement la page originale sans blocages, redirections (301, 302) ni interdictions (403). Ne devrait-il pas agir comme une page avec un autre paramètre inutile?

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.