Vulnerabilidades do wp-config.php: reforço de segurança no WordPress

Aviso de afiliados v3.1
Aviso de afiliados v3.2 (somente celular)

Enquanto o wp-config.php estava aberto no vi, a cópia de swap (.swp) criada na mesma pasta pôde ser aberta direto por um endereço web. Constatei isso no meu próprio servidor em 2026-09-13, e essa cópia continha a senha do banco de dados e todas as chaves de segurança.

Para a segurança do wp-config.php, verifique os seis itens abaixo em ordem, de cima para baixo.

1️⃣ O que acontece quando o wp-config.php fica exposto

O wp-config.php contém o nome, o usuário e a senha do banco de dados, além das 8 chaves de segurança que criptografam os cookies de login.

Arquivo wp-config.php do WordPress

Se este arquivo vazar, um atacante pode se conectar direto ao banco de dados ou falsificar sessões de login com as chaves de segurança e tomar os direitos de administrador.

2️⃣ Restringir a permissão do arquivo a 600

O WordPress normalmente deixa as pastas em 755 e os arquivos em 644, mas o wp-config.php fica restrito a 600, em que só o dono lê e grava. Este é o comando executado no site de teste testpilotweb.com.

chmod 600 /home/testpilotweb/www/wp-config.php
stat -c '%a %U' /home/testpilotweb/www/wp-config.php
600 testpilotweb

Em servidores onde o PHP roda com uma conta diferente da dona do arquivo, com 600 o WordPress não consegue ler o arquivo e o site não abre. No testpilotweb.com, o PHP-FPM roda com a mesma conta da dona do arquivo, então o site abriu normalmente depois da mudança.

Na hospedagem compartilhada sem SSH, mude para o mesmo valor pelo menu de permissões do programa de FTP ou do Gerenciador de arquivos do cPanel.

3️⃣ Bloquear o acesso no servidor web

Se você não puder mudar as permissões ou quiser mais uma camada de proteção, faça o servidor web recusar qualquer requisição ao wp-config.php.

🔲 Apache (.htaccess)

<Files wp-config.php>
    Require all denied
</Files>

As linhas [order allow,deny] e [deny from all], comuns em artigos antigos, são sintaxe do Apache 2.2. No Apache 2.4, só funcionam com o módulo de compatibilidade (mod_access_compat) ativado.

🔲 nginx

O nginx não lê o .htaccess, então a regra [location] vai no arquivo de configuração do servidor; o meu servidor também devolve 403 desse jeito.

location ~* /wp-config(-sample)?\.php$ {
    deny all;
}

Escape o ponto da expressão regular como [\.]. Se o ponto ficar como está, até endereços de posts como [/wp-config-php-configuracoes-basicas/] são bloqueados; comigo, um post já chegou a dar 403 por causa desse mesmo erro.

4️⃣ Bloquear arquivos temporários do editor e arquivos de backup

A cópia [.swp] criada enquanto um arquivo fica aberto no vi e a cópia [.bak] deixada antes de editar não são executadas como PHP: são entregues como texto puro.

No nginx, os dois tipos são cortados juntos; [444] é um código exclusivo do nginx que fecha a conexão sem resposta.

location ~ \.sw[opx]$ { return 444; }
location ~* (\.(bak|orig|old|save)|_ori|\.bak\.[0-9]+)$ { return 444; }

5️⃣ Mover um nível acima da raiz web

O WordPress procura o wp-config.php primeiro na pasta de instalação e, se não o encontrar, carrega o da pasta logo acima. Subindo o arquivo um nível para fora da [public_html], ele fica fora do alcance de qualquer endereço web.

Mas, se a pasta de cima tiver o [wp-settings.php] de outra instalação do WordPress, o WordPress não lê o wp-config.php dessa pasta. Depois de mover, confira na hora se o site e o painel abrem.

6️⃣ Desativar a edição de arquivos

Isso desativa os menus ‘Editor de arquivos de temas’ e ‘Editor de arquivos de plugins’ do painel do WordPress. Mesmo que um atacante tome os direitos de administrador, é uma das defesas mais fortes contra a inserção de código malicioso pela web.

define('DISALLOW_FILE_EDIT', true);	

7️⃣ Apagar o wp-config-sample.php

O wp-config-sample.php é um arquivo de exemplo usado na instalação, então pode ser apagado quando ela termina. Não tem nada sensível, mas é um arquivo que atacantes procuram no caminho padrão, então não há motivo para mantê-lo.

As linhas reais do arquivo de exemplo e o significado de cada item estão no artigo Configurações básicas do wp-config.php dedicado ao assunto. Se você não apagar o arquivo, a parte [(-sample)?] da regra do nginx acima também o bloqueia.

WordPress Box

ℹ️ Aviso de afiliados
O conteúdo deste site contém links de afiliados. Quando um visitante compra um produto ou serviço por meio de um desses links, o site recebe uma comissão do vendedor. O valor que o comprador paga (em promoções, ele diminui ↓) não aumenta por causa disso. Preços, descontos e informações de estoque valem para o momento em que o texto foi escrito e podem ter mudado, por isso confirme com o vendedor antes de comprar. Os produtos são escolhidos e avaliados por critérios próprios, e o recebimento de comissão não influencia a ordem de apresentação nem o conteúdo das avaliações.

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *

Demonstre sua humanidade: 9   +   3   =