¿Puedo evitar la enumeración de los nombres de usuario?

32

¿Puedo evitar la enumeración de los nombres de usuario en mi sitio de wordpress? Puedo ver usuarios en este momento usando la herramienta WPScan.

    
pregunta urok93 22.03.2012 - 15:39

8 respuestas

25

Una solución simple que utilizo en .htaccess :

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

Es similar a la respuesta de @ jptsetme, pero funciona incluso cuando la cadena de consulta es /?dummy&author=5 , y el patrón de búsqueda para RewriteRule es muy rápido: a menudo se ve una captura ([0-9]*) en expresiones regulares para esto. Pero no es necesario desperdiciar memoria para la captura cuando no usa la expresión capturada, y una coincidencia para el primer carácter es suficiente, porque no desea aceptar author=1b .

Actualización 20.04.2017

Estoy viendo más solicitudes "rotas" de personas que son incluso demasiado estúpidas para ejecutar un análisis simple. Las URL solicitadas se ven así:

/?author={num:2}

Por lo tanto, podría extender la regla anterior a:

RewriteCond %{REQUEST_URI} !^/wp-admin [NC]
RewriteCond %{QUERY_STRING} ^author=\d+ [NC,OR]
RewriteCond %{QUERY_STRING} ^author=\{num 
RewriteRule ^ - [L,R=403]
    
respondido por el fuxia 17.01.2014 - 17:59
12

No puedes.

La herramienta WPScan es una utilidad automatizada que aprovecha las URL amigables de WordPress para determinar los nombres de usuario. Recorrerá las primeras 10 ID posibles para autores y compruebe el encabezado Location en la respuesta HTTP para encontrar un nombre de usuario.

Usando http://mysite.url por ejemplo ...

WPScan comprobará http://mysite.url/?author=1 . Si su sitio está usando bastante enlaces permanentes, devolverá un redireccionamiento 301 con un encabezado Location de http://mysite.url/author/username . Si su sitio no está utilizando bonitos enlaces permanentes, devolverá un estado de 200 (OK) en su lugar, por lo que WPScan revisará la fuente de la cadena "publicaciones por nombre de usuario" y extraerá el nombre de usuario.

Qué puedes hacer

En primer lugar, solo porque alguien pueda adivinar su nombre de usuario, no significa que su sitio sea inseguro. Y realmente no hay manera de evitar que alguien analice su sitio de esa manera.

Sin embargo ...

Si estás realmente preocupado por esto, te recomendaría hacer dos cosas:

  1. Desactivar los enlaces permanentes. Esto obligará a WPScan y herramientas similares a analizar el contenido de su sitio para los nombres de usuario en lugar de confiar en la URL.
  2. Forzar a los usuarios a establecer un apodo diferente. En ausencia de un nombre de usuario en la URL, las herramientas de análisis buscarán "publicaciones por nombre de usuario" en el contenido de la fuente / publicación. Si no está colocando nombres de usuario, entonces no pueden ser atrapados.

Otra alternativa es cambiar las escrituras de los enlaces permanentes de su autor. Hay varias formas de hacerlo y probablemente encuentre algunas en este sitio también .

    
respondido por el EAMann 22.03.2012 - 16:41
4

No lo probé a fondo, pero creo que es preferible eliminar el recurso subyacente en lugar de intentar construir muros alrededor de él en el nivel del servidor web. Por lo tanto, en términos de WP, eso impediría que se procesen las variables de consulta relacionadas con el 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 tenga en cuenta que esto eliminará los archivos del autor por completo , lo que podría o no ser el nivel de paranoia adecuado :)

    
respondido por el Rarst 18.01.2014 - 10:38
3

Puede usar una regla de reescritura .htaccess para evitar esta divulgación, pero también debe asegurarse de usar apodos para evitar revelar nombres de usuario en el contenido analizable como lo describe EAMann.

El siguiente blog describe cómo hacerlo, pero tiene un error tipográfico en la regla de reescritura: enlace

La regla correcta también debe eliminar la cadena de consulta de la URL reescrita, o de lo contrario, todavía revelará el nombre de usuario. Debería verse así:

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

Funcionando bien para nosotros.

    
respondido por el jptsetme 22.03.2013 - 04:08
2

Quería agregar que también puedes hacer esto en nginx. Comprobar:
» Bloqueo de la enumeración de usuarios de WordPress en nginx - www.edwidget.name

Como nota al margen, quería evitar la enumeración del nombre de usuario en mi sitio alojado con WP Engine, lo que limita el acceso de los usuarios a archivos de configuración nginx de bajo nivel. Sin embargo, sí tienen una sección de "Reglas de redireccionamiento" en su panel de control que le permite lograr esto. Después de un tiempo logré averiguar la mejor configuración:

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

Luego debes mostrar el panel Advanced Settings ...

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

Et voila, sus nombres de usuario están seguros [r]!

    
respondido por el cfx 03.11.2013 - 23:28
0

He bloqueado completamente la enumeración de usuarios de WPScan agregando lo siguiente en 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]

Mi opinión profesional como evaluador de penetración para una agencia de gobierno ... merece SIEMPRE hacer más difícil enumerar información sobre su sitio web. Pocos de ustedes tendrán un sitio web que se eleva por encima de los piratas informáticos Google, script para niños. Estamos hablando de seguridad en capas y con cada capa, agrega tiempo y complejidad a un intento de penetración. Cada capa también se suma al conjunto de habilidades requerido del hacker. Hay algunos cortafuegos de aplicaciones realmente buenos disponibles en WP. Busque aquellos que puedan bloquear las direcciones IP que tengan repetidos intentos de inicio de sesión de usuario o 404. La idea es que su firewall bloquee automáticamente las IP que analizan su sitio web en busca de páginas que no existen o intentan iniciar sesión repetidamente en su sitio. Una buena característica también incluye XSS y capacidades de bloqueo de inyección SQL. Considere la posibilidad de usar All In One WP Security de Consejos y trucos HQ, Peter, Ruhul, Ivy. Tiene una interfaz decente y un conjunto de capacidades para principiantes y expertos por igual.

    
respondido por el Walter 14.08.2015 - 23:26
0

En lugar de la ruta .htaccess , otra alternativa es agregar el siguiente código al tema functions.php de su hijo:

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

Además, puede cambiar los enlaces de autor predeterminados que se agregan al nombre de usuario de cada página a otra cosa (como la página de inicio), usando lo siguiente:

# 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();
}
    
respondido por el Ethan Jinks O'Sullivan 19.10.2016 - 20:43
0

Sé que esta es una publicación antigua, pero para futuras referencias también me gustaría agregar mi solución. Esto es solo un fragmento para incluir el functions.php de tu tema. Dejará todo en su lugar y funcionando, incluso los archivos del autor, pero elimina las solicitudes de enumeración erróneas.

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

Lo que hace:

  • escanea la URL en busca de algo como: author=1
  • Cuando se encuentre, eliminará la variable de autor de las variables de consulta para que no se consulte.

Si usa los enlaces permanentes, esto dejará los archivos del autor intactos. Además, si la URL será algo como: /dummy?author=1 esto solo mostrará la página para /dummy .

Gracias a la respuesta de Rarst a esta pregunta y enlace

    
respondido por el leendertvb 08.02.2017 - 15:02

Lea otras preguntas en las etiquetas