Como desabilitar o directory browsing (listagem de diretorios) no WordPress
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.
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.
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
- 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 - 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 - 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 - 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 - 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
# .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>














