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

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.

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 testpilotwebEm 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.
ℹ️ 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.