Posso impedir a enumeração de nomes de usuários?

32

Posso evitar a enumeração de nomes de usuários no meu site wordpress? Eu posso ver usuários no momento usando a ferramenta WPScan.

    
por urok93 22.03.2012 / 15:39
fonte

8 respostas

25

Uma solução simples que uso em .htaccess :

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

É semelhante à resposta do @jptsetme, mas funciona mesmo quando a string de consulta é /?dummy&author=5 e o padrão de pesquisa de RewriteRule é muito rápido: você geralmente vê uma captura ([0-9]*) em expressões regulares para isso. Mas não há necessidade de desperdiçar memória para a captura quando você não usa a expressão capturada, e uma correspondência para o primeiro caractere é suficiente, porque você não quer aceitar author=1b .

Atualização 20.04.2017

Estou vendo mais solicitações "quebradas" de pessoas que são burras demais para executar uma verificação simples. Os URLs solicitados são assim:

/?author={num:2}

Você pode estender a regra acima para:

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

Você não pode.

A ferramenta WPScan é um utilitário automatizado que aproveita as URLs amigáveis do WordPress para determinar nomes de usuários. Irá percorrer os 10 primeiros IDs possíveis para autores e verifique o cabeçalho Location na resposta HTTP para encontrar um nome de usuário.

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

O WPScan irá verificar http://mysite.url/?author=1 . Se o seu site estiver usando permalinks, ele retornará um redirecionamento 301 com um Location de http://mysite.url/author/username . Se o seu site não estiver usando permalinks, ele retornará um status de 200 (OK), portanto o WPScan verificará o feed em busca da string "posts by username" e extrairá o nome de usuário.

O que você pode fazer

Primeiro, só porque alguém pode adivinhar seu nome de usuário, não significa que seu site seja inseguro. E não há como impedir que alguém analise seu site dessa maneira.

No entanto ...

Se você está realmente preocupado com isso, eu recomendaria fazer duas coisas:

  1. Desative os permalinks. Isso fará com que o WPScan e outras ferramentas semelhantes analisem o conteúdo de seu site em busca de nomes de usuários, em vez de depender do URL.
  2. Force os usuários a definir um apelido diferente. Na ausência de um nome de usuário no URL, as ferramentas de verificação pesquisarão "postagens por nome de usuário" no feed / conteúdo da postagem. Se você não está colocando nomes de usuários, eles não podem ser capturados.

Outra alternativa é alterar as reescritas do permalink do autor. Existem várias maneiras de fazer isso, e você provavelmente pode encontrar alguns neste site também .

    
por EAMann 22.03.2012 / 16:41
fonte
4

Não testei isso completamente, mas acho que é preferível remover o recurso subjacente em vez de tentar criar muros ao redor dele no nível do servidor da Web. Então, em termos de WP, isso estaria impedindo o processamento de variáveis de consulta relacionadas ao 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 note que isso matará os arquivos do autor inteiramente , que podem ou não ser o nível de paranoia apropriado:)

    
por Rarst 18.01.2014 / 10:38
fonte
3

Você pode usar uma regra de reconfiguração do .htaccess para evitar essa divulgação, mas também deve usar nicks para evitar a divulgação de nomes de usuários em conteúdo analisável, conforme descrito pelo EAMann.

O seguinte blog descreve como fazer isso, mas tem um erro de digitação na regra de reescrita: enlace

A regra correta também deve remover a string de consulta do URL reescrito, caso contrário, você ainda divulgará o nome de usuário. Deve ficar assim:

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

Trabalhando bem para nós.

    
por jptsetme 22.03.2013 / 04:08
fonte
2

Eu queria acrescentar que você pode fazer isso no nginx também. Verificar:
» Bloqueando a enumeração de usuários do WordPress no nginx - www.edwidget.name

Como uma observação, eu queria impedir a enumeração de nome de usuário no meu site hospedado com o WP Engine, que limita o acesso dos usuários aos arquivos de configuração nginx de baixo nível. No entanto, eles têm uma seção "Regras de redirecionamento" no painel de controle que permite que você faça isso. Depois de algum tempo, consegui descobrir a melhor configuração:

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

Então você precisa mostrar o painel Advanced Settings ...

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

Et voila, seus nomes de usuário estão seguros [r]!

    
por cfx 03.11.2013 / 23:28
fonte
0

Eu bloqueei completamente a enumeração de usuários do WPScan adicionando o seguinte no 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]

Minha opinião profissional como testador de penetração para uma agência de governo ... é SEMPRE que dificulta a enumeração de informações sobre o seu site. Poucos de vocês terão um site que se eleva acima do google, script kiddie hackers. Estamos falando de segurança em camadas e, com cada camada, você adiciona tempo e complexidade a uma tentativa de penetração. Cada camada também adiciona ao conjunto de habilidades exigidas do hacker. Existem alguns firewalls de aplicativos realmente bons disponíveis no WP. Procure por aqueles que podem bloquear endereços IP que tenham tentativas repetidas de login de usuário ou 404. A ideia é que o seu firewall bloqueie automaticamente os IPs que verificam o seu site em busca de páginas que não existem ou tentem acessar o site repetidamente. Um bom recurso também inclui os recursos de bloqueio de injeção de XSS e SQL. Considere usar, All In One WP Segurança de dicas e truques HQ, Peter, Ruhul, Ivy. Ele tem uma interface decente e capacidade definida para o novato e especialista.

    
por Walter 14.08.2015 / 23:26
fonte
0

Em vez da rota .htaccess , outra alternativa é adicionar o seguinte código ao functions.php :

do seu filho.
# 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;
    }
}

Além disso, você pode alterar os links de autor padrão que são adicionados ao nome de usuário de cada página para outra coisa (como a página inicial), usando o seguinte:

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

Eu sei que este é um post antigo, mas para referências futuras eu gostaria de adicionar minha solução também. Este é apenas um snippet para colocar o functions.php do seu tema. Ele deixará tudo no lugar e funcionando, até mesmo os arquivos do autor, mas elimina os pedidos de enumeração incorretos.

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

O que faz:

  • verifica o URL para algo como: author=1
  • Quando encontrado, removerá a variável do autor da consulta vars, de modo que não será consultado.

Se você usar permalinks, isso deixará os arquivos do autor intactos. Além disso, se a URL for algo como: /dummy?author=1 , isso mostrará apenas a página para /dummy .

Graças à resposta da Rarst a essa pergunta e enlace

    
por leendertvb 08.02.2017 / 15:02
fonte

Tags