# Como corrigir o wp-config.php exposto no WordPress

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

Erros relacionados

- [Como corrigir permissões de arquivos e pastas (644/755)](https://full.services/wp-fixer/corrigir-permissoes-arquivos-wordpress/)
- [Como corrigir API REST do WordPress exposta](https://full.services/wp-fixer/corrigir-api-rest-exposta-wordpress/)
- [Como desativar o XML-RPC com segurança](https://full.services/wp-fixer/desativar-xmlrpc-wordpress/)

## 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.

## Código

```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.

**Fonte:** [WordPress.org — Hardening WordPress: Securing wp-config.php](https://wordpress.org/documentation/article/hardening-wordpress/)
