Como corrigir o wp-config.php exposto no WordPress

Time Full Services Time Full Services
Tipo Seguranca
Nome do erro wp-config.php exposto EN: Exposed wp-config.php
Severidade Crítico
Descrição O wp-config exposto é uma falha grave em que o arquivo de configuração do WordPress fica legível pela web, revelando a senha do banco e as chaves de autenticação. Ocorre quando o servidor entrega o conteúdo em texto, em vez de processá-lo como PHP, ou quando um backup do arquivo fica acessível por URL.

O que é o wp-config.php exposto?

O wp-config.php guarda os dados mais sensíveis da instalação: usuário e senha do banco de dados, o prefixo das tabelas e as chaves e sais de autenticação (SECRET KEYS) que protegem os cookies de login. Em condições normais o PHP executa o arquivo e nada do conteúdo chega ao navegador. Ele fica exposto quando o servidor para de interpretar PHP e serve o arquivo como texto, quando existe uma cópia de backup acessível (como wp-config.php.bak) ou quando um diretório aberto lista o arquivo. Qualquer um desses casos entrega ao atacante o acesso ao banco e a possibilidade de forjar sessões.

Como identificar

  • Acessar seudominio.com/wp-config.php no navegador mostra o conteúdo do arquivo em texto, com as linhas DB_PASSWORD e as chaves visíveis.
  • Um scanner de segurança reporta “wp-config.php is publicly accessible” ou “sensitive file exposure”.
  • Existe um arquivo como wp-config.php.bak, wp-config.txt ou wp-config.php~ acessível por URL direta.
  • Após uma queda do PHP, páginas .php passam a ser baixadas ou exibidas como texto em vez de executadas.
Antes de começar: Tenha um backup do .htaccess antes de editar. Uma regra mal escrita pode derrubar o site inteiro com erro 500. Após confirmar a exposição, troque a senha do banco e gere novas chaves de autenticação: enquanto as credenciais antigas valerem, o site segue vulnerável mesmo com o arquivo já bloqueado.

Como prevenir

  • Mantenha a regra de negar o wp-config.php no .htaccess ou no Nginx em todos os sites
  • Nunca deixe cópias de backup do arquivo na raiz acessível; guarde backups fora do diretório público
  • Defina a permissão do wp-config.php em 640 ou 600 e desative a listagem de diretório no servidor

Causa

  • Servidor servindo arquivos .php como texto após uma falha do handler do PHP ou do PHP-FPM.
  • Cópia de backup do arquivo (wp-config.php.bak, .old, .txt) deixada na raiz e acessível por URL.
  • Listagem de diretório ativada na raiz do site, expondo a presença e o nome do arquivo de configuração.
  • Ausência de regra no .htaccess ou no Nginx negando o acesso direto ao wp-config.php.
  • Permissão do arquivo larga demais (como 777 ou 666), permitindo leitura por outros usuários do servidor compartilhado.

Como resolver

  1. Confirme a exposição e troque as credenciais: se o conteúdo do wp-config.php apareceu na web, considere as credenciais vazadas. Troque a senha do banco de dados e gere novas chaves de autenticação assim que possível, porque elas já podem ter sido lidas.
  2. Bloqueie o arquivo no Apache (.htaccess): no Apache, negue o acesso direto ao wp-config.php pelo .htaccess da raiz, usando o bloco de código abaixo. Isso impede que o arquivo seja servido por URL, mesmo se o PHP cair.
  3. No Nginx, negue pela configuração do site: adicione um bloco location para wp-config.php retornando 403 e peça ao host para recarregar a configuração do servidor.
  4. Remova backups e ajuste a permissão: apague qualquer cópia do arquivo (wp-config.php.bak, .old, .txt) da raiz e defina a permissão do wp-config.php para 640 (ou 600). Desative também a listagem de diretório no servidor.
  5. Valide o bloqueio: acesse seudominio.com/wp-config.php de novo no navegador. Protegido corretamente, deve retornar 403 Forbidden, sem mostrar nenhuma linha do conteúdo.
APACHE
# .htaccess da raiz - nega acesso direto ao wp-config.php (Apache 2.4)
<Files wp-config.php>
Require all denied
</Files>

# Bloqueia tambem copias de backup comuns do arquivo:
<FilesMatch "^wp-config.php.(bak|old|txt|save|orig|swp)$">
Require all denied
</FilesMatch>

Perguntas frequentes

Por que o wp-config.php exposto é tão grave?
Porque ele contém a senha do banco de dados e as chaves de autenticação do site. Com a senha do banco, o atacante lê e altera todo o conteúdo; com as chaves, consegue forjar cookies de sessão e se passar por um administrador. É um vazamento que entrega o controle do site.
Como sei se o meu wp-config.php está exposto?
Acesse seudominio.com/wp-config.php no navegador. Se aparecer o conteúdo em texto, com linhas como DB_PASSWORD e as chaves, o arquivo está exposto. Protegido, a URL deve retornar 403 Forbidden ou uma página em branco, nunca o código.
O PHP normalmente esconde esse arquivo. Quando ele vaza?
Quando o servidor para de interpretar PHP e serve o arquivo como texto, o que acontece em quedas do handler do PHP ou má configuração. Também vaza por cópias de backup acessíveis (wp-config.php.bak) e por listagem de diretório aberta. A regra no .htaccess protege contra todos esses casos.
Preciso trocar a senha do banco depois de bloquear?
Sim, se o conteúdo chegou a ficar acessível na web. Bloquear o arquivo impede novos acessos, mas as credenciais antigas podem já ter sido lidas. Troque a senha do banco de dados e gere novas chaves de autenticação para invalidar o que possa ter vazado.
Bloquear pelo .htaccess é suficiente?
É a defesa principal no Apache, porque barra a requisição antes de servir o arquivo. Some a isso remover cópias de backup, ajustar a permissão para 640 e desativar a listagem de diretório. No Nginx, a regra equivalente é um bloco location negando o wp-config.php.
Como gero novas chaves de autenticação do WordPress?
O WordPress oferece um gerador oficial de chaves secretas. Copie o bloco gerado e substitua as linhas de SECRET KEY e SALT correspondentes no wp-config.php. Ao salvar, todas as sessões ativas são invalidadas, o que expulsa qualquer sessão forjada com as chaves antigas.

Seja PRO.

Tenha acesso a snippets de código premium — PHP, JavaScript, CSS e HTML prontos para usar em seus projetos.

Conhecer o plano Pro →

Uma nova era para o WordPress.

A FULL Services redefine o CMS com uma arquitetura modular que transforma o WordPress em um motor de crescimento digital. 

Painéis personalizados

Um novo nível de controle para o WordPress. Acompanhe métricas, automações e evolução do seu site em um único painel visual.

A força por trás de grandes marcas

Para agências, estúdios e profissionais independentes que desejam oferecer soluções de alto nível com sua própria marca.

Componentes

Hero Sections

30 componentes

Seções de CTA

14 componentes

Login

14 componentes

Blog

14 componentes

Cabeçalhos

24 componentes

Seções de FAQ

53 componentes

Cadastro

53 componentes

Blog individual

53 componentes

Rodapés

28 componentes

Seções de contato

27 componentes

Seções de preços

27 componentes

Faixas

27 componentes

Portfólio

16 componentes

Seções de equipe

12 componentes

Números

12 componentes

Logotipos

12 componentes