# Como desabilitar o directory browsing (listagem de diretorios) no WordPress

Desabilitar o directory browsing no WordPress impede que o servidor exiba a lista de arquivos de uma pasta sem index, como wp-content/uploads, quando alguem abre a URL da pasta. A correção usa a diretiva Options -Indexes no .htaccess (Apache) ou a opção de prevenir listagem do plugin All-In-One Security.

## O que é directory browsing no WordPress?

O directory browsing (ou directory listing) no WordPress acontece quando o servidor web responde a URL de uma pasta que não tem arquivo de indice (index.php ou index.html) exibindo a lista completa dos arquivos e subpastas dentro dela. Em vez de um erro ou de uma página, o visitante ve o conteúdo bruto do diretório, com nomes de arquivos, datas e tamanhos clicaveis. Em servidores Apache esse comportamento e controlado pela diretiva Options Indexes; quando ela esta ativa e a pasta não tem index, a listagem aparece.

O risco e de exposicao de informação: pastas como wp-content/uploads, wp-content/plugins e wp-includes passam a revelar a estrutura interna do site, versões de plugins, backups esquecidos, arquivos .sql, .zip e logs que nunca deveriam ser publicos. Um atacante usa essa lista para mapear o site e encontrar arquivos sensiveis. Por isso a documentação de segurança do WordPress e os plugins de hardening tratam a listagem de diretorios como uma falha de configuração a ser fechada, ainda que não seja, sozinha, uma vulnerabilidade de código.

## Como identificar

- Ao acessar a URL de uma pasta sem index, como https://seusite.com/wp-content/uploads/, o navegador exibe o título 'Index of /wp-content/uploads' com a lista de arquivos em vez de um erro 403 ou 404.
- Pastas internas do WordPress (wp-content/plugins, wp-includes) mostram seus arquivos e subpastas clicaveis quando abertas diretamente pela URL.
- Ferramentas de scan de segurança ou o relatório de um plugin como o AIOS apontam 'Directory listing is enabled' ou 'Directory browsing não esta bloqueado'.
- Arquivos enviados (PDFs, imagens, backups, .zip, .sql) ficam navegaveis publicamente apenas digitando o caminho da pasta, sem nenhum link no site apontar para eles.
- O cabeçalho da página de listagem mostra a assinatura do servidor (ex.: 'Apache/2.4.x Server at seusite.com Port 443'), revelando software e versão.

**Antes de começar:** Antes de editar o .htaccess, a configuração do Nginx ou alterar opções do plugin de segurança, faca um backup do site (arquivos e banco de dados) ou teste primeiro em um ambiente de staging. Uma diretiva mal colocada no .htaccess pode derrubar o site com erro 500, e ter o backup permite reverter na hora.

## Como prevenir

- Mantenha a diretiva Options -Indexes no .htaccess (ou autoindex off no Nginx) como padrão em todo site novo, fora do bloco gerenciado pelo WordPress para não ser sobrescrita.
- Deixe um index.php vazio em wp-content/uploads e demais pastas que recebem arquivos, como segunda camada caso a listagem seja reativada no servidor.
- Nunca deixe backups, dumps .sql, .zip ou logs dentro de pastas publicas como uploads; guarde-os fora da raiz web ou em armazenamento privado.
- Rode periodicamente o scan de segurança de um plugin de hardening (como o AIOS) para detectar se a listagem de diretorios voltou a ficar aberta após uma atualização ou migração.

Erros relacionados

- [Como corrigir wp-config.php exposto](https://full.services/wp-fixer/corrigir-wp-config-exposto-wordpress/)
- [Como corrigir permissões de arquivos e pastas (644/755)](https://full.services/wp-fixer/corrigir-permissoes-arquivos-wordpress/)
- [Como desativar o XML-RPC com segurança](https://full.services/wp-fixer/desativar-xmlrpc-wordpress/)

## Causa

- A diretiva Options Indexes esta ativa na configuração do Apache ou no .htaccess do site, e as pastas do WordPress não possuem arquivo index, entao o servidor monta a listagem automaticamente.
- O arquivo .htaccess da raiz não contem a linha Options -Indexes, condicao que o plugin All-In-One Security adiciona quando você ativa 'Prevent directory listing' na área de Filesystem Security.
- As pastas de upload e de plugins não tem um index.php vazio (ou index.html) que o WordPress normalmente cria; sem ele e sem -Indexes, o Apache cai no módulo mod_autoindex e exibe o conteúdo.
- O servidor roda Apache com o módulo mod_autoindex habilitado e sem nenhuma diretiva que desligue a listagem para os diretorios do site.
- Em hospedagem com Nginx, falta o equivalente 'autoindex off;' no bloco do server ou do location, e a configuração herdou autoindex on de um padrão do provedor.

## Como resolver

1. Confirme que a listagem esta realmente aberta: Antes de mexer em arquivos, teste o sintoma no navegador. Acesse a URL de uma pasta sem index, como a de uploads, e veja se aparece a lista de arquivos com o título Index of. Isso confirma que o directory browsing esta ativo e que a correção precisa ser aplicada no servidor.

```
Abra no navegador: https://seusite.com/wp-content/uploads/
Abra também: https://seusite.com/wp-includes/
Se aparecer 'Index of /...' com lista de arquivos, a listagem esta aberta
```

2. Adicione Options -Indexes no .htaccess (Apache): No Apache, a forma direta de fechar a listagem e a diretiva Options -Indexes no .htaccess da raiz do WordPress. Edite o arquivo via FTP ou pelo gerenciador de arquivos da hospedagem e adicione a linha fora do bloco entre BEGIN WordPress e END WordPress, para o WordPress não sobrescrever ao salvar permalinks.

```
Conecte por FTP/SFTP e baixe o arquivo .htaccess da raiz do site
Adicione no topo, antes de '# BEGIN WordPress': Options -Indexes
Salve e envie o arquivo de volta ao servidor
Recarregue a URL da pasta de uploads para confirmar o bloqueio
```

3. Use o plugin All-In-One Security (sem editar arquivo): Se você prefere não editar o .htaccess manualmente, o plugin All-In-One Security tem um interruptor que adiciona a regra para você. Na área de Filesystem Security, marque a opção de prevenir a listagem de diretorios e salve; o plugin grava a diretiva no .htaccess automaticamente.

```
Painel WP -> WP Security -> Filesystem Security
Aba 'File Permissions' / 'Directory Listing'
Marque 'Disable directory listing' (Desabilitar listagem de diretorios) e salve
```

4. Em Nginx, desligue o autoindex: O Nginx não le .htaccess; a listagem e controlada pela diretiva autoindex no arquivo de configuração do servidor. Defina autoindex off no bloco do site (ou no location da pasta) e recarregue o Nginx. Em hospedagem gerenciada sem acesso ao arquivo, peça ao suporte para aplicar autoindex off.

```
Edite o arquivo de config do site (ex.: /etc/nginx/sites-available/seusite)
Dentro do bloco server { ... } garanta: autoindex off;
Teste a config: nginx -t
Recarregue: systemctl reload nginx
```

5. Garanta um index.php vazio nas pastas sensiveis: Como camada extra, mantenha um arquivo index.php vazio (com apenas um comentario de silencio) dentro das pastas de upload e plugins. Mesmo que alguem reative a listagem no servidor, o index existente impede o servidor de montar o autoindex daquela pasta.

```
Crie um arquivo index.php em wp-content/uploads/ com o conteúdo: comentario 'Silence is golden'
Repita em wp-content/plugins/ e nas subpastas que recebem upload
Confira pela URL que a pasta agora retorna página em branco, não a lista
```


## Código

```apache
# .htaccess na raiz do WordPress
# Coloque FORA do bloco # BEGIN WordPress / # END WordPress
# para o WordPress nao sobrescrever ao salvar permalinks.

# Desabilita a listagem automatica de diretorios (directory browsing)
Options -Indexes

# Reforco: bloqueia acesso direto a arquivos sensiveis comuns
<FilesMatch ".(sql|zip|tar|gz|log|bak)$">
    Require all denied
</FilesMatch>
```

## Perguntas frequentes

### O que e directory browsing no WordPress

E quando o servidor exibe a lista de arquivos de uma pasta que não tem index, em vez de uma página ou de um erro. Ao abrir a URL de uma pasta como wp-content/uploads, o visitante ve todos os arquivos clicaveis. Isso expoe a estrutura do site e deve ser desabilitado.

### Como saber se o directory browsing esta ativo no meu site

Acesse no navegador a URL de uma pasta sem index, como https://seusite.com/wp-content/uploads/. Se aparecer um título 'Index of' com a lista de arquivos, a listagem esta aberta. Se aparecer página em branco, erro 403 ou 404, já esta fechada.

### Qual a diretiva para desabilitar a listagem no Apache

A diretiva e Options -Indexes, adicionada ao .htaccess da raiz do WordPress, de preferencia fora do bloco entre BEGIN WordPress e END WordPress para não ser sobrescrita. Ela instrui o Apache a não montar o autoindex de pastas sem index.

### E no Nginx, como desligo a listagem de diretorios

O Nginx ignora o .htaccess. A listagem e controlada pela diretiva autoindex; defina autoindex off no bloco server ou no location da pasta e recarregue o Nginx com systemctl reload nginx. Em hospedagem gerenciada, peça ao suporte para aplicar.

### Desabilitar directory browsing quebra alguma coisa do site

Não. Bloquear a listagem não impede o site de carregar imagens, CSS, JS ou qualquer arquivo referenciado por URL direta. Ela so impede a exibicao do indice automático de pastas sem index, que nenhum recurso legitimo do site precisa.

### O plugin All-In-One Security desabilita a listagem para mim

Sim. Na área de Filesystem Security do AIOS existe a opção de prevenir a listagem de diretorios; ao ativa-la o plugin grava a diretiva no .htaccess automaticamente, sem você precisar editar o arquivo na mao.

### Por que ter um index.php vazio nas pastas ajuda

Quando a pasta tem um arquivo index, o servidor entrega esse arquivo (página em branco) em vez de montar a listagem. Por isso o WordPress cria index.php vazios em várias pastas. Mante-los e uma segunda camada caso a diretiva do servidor seja removida.

### Directory browsing aberto e uma vulnerabilidade grave

Sozinho não e uma falha de código, e sim uma configuração insegura que expoe informação. O risco vira grave quando a pasta listada contem backups, dumps de banco ou arquivos sensiveis que um atacante usa para mapear e invadir o site. Por isso a recomendacao e sempre fecha-la.

**Fonte:** [All-In-One Security (AIOS) - Documentacao oficial (Filesystem Security)](https://teamupdraft.com/documentation/all-in-one-security/)
