詳細検索

Como evitar vazamento de nome de usuário do WordPress usando consultas de autor

Avatar
por maeno
5 min de leitura

Como evitar vazamento de nome de usuário do WordPress usando consultas de autor
Traduzido do 日本語 • Ver original

O DEVLAB é operado no WordPress, e encontrei um artigo sobre WordPress que chamou minha atenção. Ao adicionar uma consulta GET de "?author=x" à URL inicial do seu site WordPress, o nome de usuário no site será revelado (* Veja a dica do WordPress da MT Systems para detalhes). O x em '?author=x' é um número e se torna o ID de usuário do WordPress (a chave principal da tabela de usuário). Em outras palavras, se você especificar 1 para x, você se tornará um usuário de gerenciamento de raiz do WordPress. Tentei imediatamente no DEVLAB e descobri que 'https://dev.blog.colorkrew.com?author=1' foi reescrito de acordo com as regras de reescrita especificadas nas configurações de permalink e <ルート管理ユーザー名>redirecionado para 'https://blog.colorkrew.com/author//'. Se isso continuar, a senha será forçada por força bruta, e se o login for bem-sucedido, o site será quebrado! No entanto, no caso do DEVLAB, a tela geral de login do WordPress 'wp-login.php' está desativada, e é difícil encontrar um método de login, então está seguro por enquanto. No entanto, precisamos evitar vulnerabilidades que causem vazamento de nomes de usuário, então pensamos em contramedidas.

Como introduzido no site da MT Systems, o método de redirecionar pelo modelo 'author.php' na página de arquivo do autor exibirá o nome de usuário como a localização do redirecionamento no cabeçalho da resposta HTTP, então, mesmo que você adicione uma regra de reescrita em '.htaccess', é problemático que não possa ser evitada. O site da MT Systems publicou uma contramedida para eventualmente reescrever a 'user_nicename' dos dados do usuário para um valor diferente do 'user_login' da conta de login, mas é bastante difícil porque é um item que não pode ser editado diretamente do painel de administração.

Será que não será um pouco mais fácil de lidar... ── Então, tentei tomar minhas próprias contramedidas.

evitar o vazamento do nome de usuário por consulta do autor no WordPress. 
função knockout_author_query() { 
    Desativar a regra de reescrita do autor
    reescrita global $wp; 
    $wp_reescrever->flush_rules(); 
    $wp_rewrite->author_base = ''; 
    $wp_rewrite->author_structure = '/'; 
    para solicitação de consulta do autor
    if (isset($_REQUEST['author']) && !empty($_REQUEST['author'])) { 
        $user_info = get_userdata(intval($_REQUEST['autor'])); 
        if ($user_info &&array_key_exists('administrator', $user_info->caps) & & in_array('administrator', $user_info->roles)) { 
            wp_redirect(home_url()); 
            saída; 
        } else { 
            Ativar regra de reescrita do autor
            $wp_rewrite->author_base = 'autor'; 
            $wp_rewrite->author_structure = '/author/%author%/'; 
        }
    }
}
add_action('init', 'knockout_author_query'); 

Você pode adicionar a fonte acima ao 'function.php' do seu tema ou algo assim para ativar imediatamente.

Quanto ao conteúdo do processo, para sites que reescreveram configurações diferentes da padrão nas configurações de permalink, primeiro sobrescrevemos o processo WP_Rewrite e mudamos a reescrita para o arquivo do autor para uma página TOP uniforme ('/' diretamente sob o domínio). Em seguida, ao recuperar uma consulta com '?author=x', se o ID de usuário especificado na consulta for um usuário com privilégios de administrador, ela será reescrita para a página TOP (se as configurações do permalink foram alteradas em relação ao padrão, será redirecionado se for o padrão), e se for um usuário não administrador, o arquivo do autor será exibido. Nesse caso, não é um redirecionamento após enviar o cabeçalho com o modelo 'author.php', etc., então mesmo que seja redirecionado (ou reescrito), a locação não será enviada para o cabeçalho de resposta HTTP.

Cabeçalho de requisição HTTP quando solicitado com ?author=1

GET /?author=1 HTTP/1.1
Apresentador: devlab.isao.co.jp
Conexão: manter a vida
Aceitar: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*; q=0.8
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, como Gecko) Chrome/37.0.2062.120 Safari/537.36
Aceitar-Codificação: gzip, desinflar, sdch
Aceitar Língua: ja,en-US; q=0,8,en; q=0,6
Cookies: (omitido)

Cabeçalho de resposta HTTP quando solicitado com ?author=1

HTTP/1.1 302 Encontrado
Data: Sex, 12 Set 2014 08:07:24 GMT
Servidor: Apache/2.4.9 (Win32) OpenSSL/1.0.1g PHP/5.5.11
X-Powered por: PHP/5.5.11
Localização: https://dev.blog.colorkrew.com
Conteúdo - Duração: 0
Manter Vivo: tempo=5, máximo=100
Conexão: Manter Viva
Tipo de Conteúdo: texto/html

No entanto, isso por si só é uma medida de segurança frouxa, e se um usuário que não seja o administrador exibir o arquivo do autor, o nome de usuário desse usuário será exibido, então, no final, se o 'user_nicename' das informações do usuário não estiver definido para um valor diferente do valor de 'user_login', o risco de ser puxado para fora da conta de login e sofrer o ataque de força bruta da senha permanece. Bem, a conta de login do usuário administrador não será vazada, então não será o dano mais grave, mas a manipulação do site pode ser feita com facilidade, então, se você quiser usar a função de arquivo do autor, é melhor mudar também o 'user_nicename'. Se o site não usar o arquivo do autor, você pode excluir essa parte do processamento da fonte anterior e fazer o seguinte.

evitar o vazamento do nome de usuário por consulta do autor no WordPress. 
função knockout_author_query() { 
    Desativar a regra de reescrita do autor
    reescrita global $wp; 
    $wp_reescrever->flush_rules(); 
    $wp_rewrite->author_base = ''; 
    $wp_rewrite->author_structure = '/'; 
    para solicitação de consulta do autor
    if (isset($_REQUEST['author']) && !empty($_REQUEST['author'])) { 
        $user_info = get_userdata(intval($_REQUEST['autor'])); 
        if ($user_info &&array_key_exists('administrator', $user_info->caps) & & in_array('administrator', $user_info->roles)) { 
            wp_redirect(home_url()); 
            saída; 
        }
    }
}
add_action('init', 'knockout_author_query'); 

Nesse caso, o arquivo de autores não será exibido para nenhum usuário, e eles serão redirecionados para a página PRINCIPAL, então não há risco de vazamento de nome de usuário devido à consulta '?author=x'. A DEVLAB está tomando medidas a respeito.

Além disso, se você ativou a reescrita nas configurações do permalink, desabilitar o acesso ao caminho de '/author/' aumentará ainda mais a segurança, então recomendamos que você tome medidas aqui (adicione a seguinte regra de reescrita em '.htaccess') também.

Regra de Reescrita ^autor/(.*)? / [R=302,L]

Links de Referência

Related Articles