Aprenda a proteger wp-login.php de acesso direto e permitir acesso apenas a detentores de um cookie.
É uma forma simples e eficiente de proteger a área de administração do wordpress e pode ser usada em conjunto com outras defesas.
Quando o atacante tenta acessar o wp-login.php diretamente ele recebe erro 403 o mesmo acontece se tentar acessar /wp-admin/ que vai redirecionar para wp-login.php exibir erro 403.
wp-login.php negar acesso direto
Na configuração do nginx adicione o seguinte código dentro da location /wp-login.php:
if ($http_cookie !~ "^.*wp\-secreto345=8542985367.*$"){
return 403;
}
Esse código vai verificar se o usuário possui o cookie wp-secreto345=8542985367 caso não possua ele vai exibir erro 403.
Veja como fica uma configuração típica completa:
location = /wp-login.php {
include fastcgi_params;
fastcgi_pass 127.0.0.1:9000;
if ($http_cookie !~ "^.*wp\-secreto345=8542985367.*$"){
return 403;
}
}
Atenção
Não use esse mesmo cookie, altere de forma única para seu servidor, exemplos:
wp-supersecret0745=6589753249
wp-secret78445=3265986356
wp-ssscret5241=8759586235
A location = /wp-login.php com include fastcgi_params para funcionar php e fastcgi_pass 127.0.0.1:9000 para informar onde executar o php, depois o if com a verificação do cookie.
Essa configuração pode ser diferente no seu servidor, então não altere outros parâmetros, apenas adicione o if.
Caso não tenha nenhuma configuração específica para /wp-login.php lembre de adicionar o básico para o php funcionar nesse location do nginx.
Arquivo PHP de redirecionamento
Agora é preciso criar um arquivo PHP na raiz do wordpress com esse conteúdo abaixo:
O arquivo PHP tem que ter um nome único que apenas o administrador do site saiba, exemplo: vamoslogar2354.php
<?php
setcookie("wp-secreto345", "8542985367", time() + 3600, "/", "", true, true);
header("X-Robots-Tag: noindex");
header("Location: wp-login.php");
Esse código em PHP cria um cookie com o nome “wp-secreto345” e valor “8542985367” os mesmo valores que estão no if do nginx e verifica se o usuário tem acesso ao wp-login.php.
Esse cookie será válido por uma hora a partir do momento em que for criado e estará disponível em todo o site (“/”), além disso, o parâmetro “true” indica que o cookie deve ser enviado apenas em uma conexão segura HTTPS e o segundo parâmetro “true” indica que o cookie deve ser acessível apenas através de scripts em PHP.
Em seguida, o código envia um cabeçalho HTTP “X-Robots-Tag” com o valor “noindex”, que indica aos mecanismos de busca que a página não deve ser indexada.
Por fim, o código redireciona o usuário para a página “wp-login.php” usando o cabeçalho HTTP “Location”. Isso significa que o usuário será redirecionado automaticamente para a página de login do WordPress.
Agora, o usuário chegou na página wp-login.php e não recebeu código de erro 403, pois possui o cookie de verificação e pode efetuar o login normalmente.
Sobre essa proteção
Esse método não é a forma definitiva de proteger o wp-login.php, mas é efetivo e tem a vantagem de funcionar em conjunto com outros métodos, como o htpasswd, limit_req, lista de IPs, entre outros.
Não deve ser usado em sites woocommerce, pois os usuários do site precisam utilizar o wp-login.php para efetuar login.
