🎉 USE O CUPOM FIM.DE.SEMANA.FULL | 20% OFF acima de R$ 100,00

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

Time Full Services Time Full Services
Tipo Seguranca
Nome do erro Listagem de diretorios exposta EN: Index of /... (directory listing enabled)
Severidade Atenção
Descrição 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.

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

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