Guida di risoluzione

Disabilitare il directory listing in WordPress (Apache e nginx)

1 maggio 2026 Aggiornato il 1 mag 2026

Se visiti un URL di directory sul tuo sito, ad esempio https://tuodominio.it/wp-content/uploads/2024/, succede una di tre cose. Vedi una pulita pagina WordPress bianca (perché index.php prende il controllo), vedi una pagina "403 Forbidden", o vedi qualcosa che sembra un browser FTP: un elenco di ogni file in quella cartella, con dimensioni e timestamp. Il terzo caso è il problema di cui parla questa guida.

Il directory listing (chiamato anche "directory browsing" o "directory indexing") è una funzionalità del webserver che mostra automaticamente un indice HTML quando non viene trovato alcun index.html o index.php in una cartella. Su un sito statico è occasionalmente utile. Su un sito WordPress è quasi sempre una perdita. Questa guida spiega cosa trapela specificamente, perché conta, e come disabilitare correttamente la funzionalità su Apache, nginx e i vari host WordPress gestiti.

Cosa trapela davvero quando il directory listing è abilitato?

La maggior parte delle cartelle WordPress contiene almeno un file che è interessante per un aggressore, un concorrente o semplicemente un visitatore curioso. Gli scenari realistici peggiori:

  • /wp-content/uploads/ contiene ogni file multimediale che sia mai stato caricato, organizzato per anno e mese. Con il listing abilitato, chiunque può vedere PDF che sono stati "scollegati" ma mai eliminati, bozze di immagini, documenti dei clienti e qualsiasi file privato che un editor ha caricato pensando che un "URL oscuro" fosse sufficiente protezione.
  • /wp-content/plugins/ rivela l'elenco esatto dei plugin installati sul sito, inclusi quelli disattivati ma non eliminati. È una precisa lista della spesa di vulnerabilità per qualsiasi scanner.
  • /wp-content/backup/, /backups/, /wp-content/uploads/backups/ e cartelle simili sono destinazioni tipiche per i plugin di backup. Se il listing è attivo, dump completi del database e backup zippati del sito diventano direttamente scaricabili.
  • Le cartelle dei temi contengono spesso vecchie versioni di style.css, file SCSS rimasti, pagine di test nascoste e note dello sviluppatore mai destinate al pubblico.
  • Le cartelle root del sito possono mostrare wp-config.php.bak, file swap di editor (.swp), cartelle .git/ da un deploy fallito e simili residui di pulizia.

I file sensibili in quelle cartelle sono solitamente lì perché qualcuno li ha caricati rapidamente, voleva eliminarli più tardi e si è dimenticato. Finché la cartella non elenca il contenuto, nessuno li trova. Nel momento in cui il listing viene abilitato, ogni URL in quelle cartelle è a un clic dall'essere indicizzato da un motore di ricerca o raccolto da uno scanner.

Come controllare se il directory listing è abilitato sul tuo sito

Il test più rapido richiede dieci secondi. Apri questi URL in una finestra privata:

  • https://tuodominio.it/wp-content/
  • https://tuodominio.it/wp-content/uploads/
  • https://tuodominio.it/wp-content/plugins/
  • https://tuodominio.it/wp-includes/

Quello che vuoi vedere è una pagina 403 Forbidden o, nel caso di /wp-content/, una pagina bianca vuota (quello è l'index.php vuoto di WordPress che fa il suo lavoro). Quello che non vuoi vedere è un elenco di file. Se ne vedi uno, il listing è attivo per quella cartella. InspectWP esegue anche questo controllo a ogni scansione e segnala le cartelle interessate nella sezione sicurezza.

Opzione 1: disabilitare il directory listing su Apache (e LiteSpeed)

La direttiva Apache che controlla questo comportamento si chiama Options, con il valore Indexes che abilita il listing e Options Indexes viene negato scrivendolo senza il più iniziale, più un segno meno nella direttiva stessa. Aggiungi quanto segue al file .htaccess nella tua cartella root di WordPress, sopra il marker # BEGIN WordPress:

Options -Indexes

Questa singola riga disabilita il listing in una volta per l'intera installazione WordPress. Si applica a ogni cartella sotto la document root, a meno che una regola più specifica più in profondità nell'albero non la sovrascriva.

Se il tuo host blocca Options in .htaccess completamente (alcuni shared host fanno questo per ragioni di prestazioni), hai due alternative:

  1. Metti un index.php o index.html vuoto in ogni cartella che vuoi chiudere. WordPress lo fa già per /wp-content/, /wp-content/plugins/ e alcuni altri, ma non per /wp-content/uploads/. Il file vuoto fa sì che Apache serva quel file invece di elencare la cartella.
  2. Chiedi al tuo host di abilitare la direttiva Options per il tuo account. La maggior parte degli host gestiti lo fa su richiesta.

Il trucco di index.php è semplice ma facile da sbagliare: devi ricordarti di aggiungere il file a ogni cartella di nuova creazione, comprese le cartelle anno/mese che WordPress crea automaticamente per i nuovi upload. Una regola del webserver non ha quel problema.

Opzione 2: disabilitare il directory listing su nginx

Su nginx il directory listing è controllato dalla direttiva autoindex. Per impostazione predefinita è impostata su off nella maggior parte delle installazioni, quindi su una configurazione nginx standard il problema non esiste. Le cartelle che visiti cadono in un 403 quando non è presente un file indice.

Se il listing è attivo, qualcuno l'ha abilitato esplicitamente a un certo punto. Cerca autoindex on; nel tuo nginx.conf, nel blocco server del sito o in qualsiasi file conf.d incluso. Rimuovi la riga o cambiala in:

autoindex off;

Ricarica nginx con sudo nginx -t && sudo systemctl reload nginx. La prossima richiesta di cartella otterrà un 403 invece di un elenco di file.

Se non puoi ricaricare nginx (hosting gestito schermato), lo stesso trucco di index.php dalla sezione Apache funziona anche su nginx, perché nginx serve volentieri un file indice esistente prima di ripiegare su autoindex.

Opzione 3: hosting WordPress gestito

Gli host gestiti (Raidboxes, Kinsta, WP Engine, Cloudways, Pressable, ecc.) di solito disabilitano il directory listing per impostazione predefinita a livello di server. Se noti che uno di questi host ha comunque abilitato il listing sul tuo account, un rapido ticket di supporto è l'azione giusta. Hanno accesso alla configurazione nginx centrale e possono risolverlo in pochi minuti. Cercare di aggirarlo da WordPress su un host gestito raramente ne vale la pena.

Nota che alcuni host usano uno strato CDN (Cloudflare, KeyCDN, Bunny) che memorizza in cache le richieste di cartelle. Se modifichi la configurazione del server e vedi ancora un elenco di file, il CDN potrebbe servire una versione in cache. Svuota la cache per i percorsi interessati e testa di nuovo.

Errore comune: proteggere wp-content/uploads con .htaccess

Un pattern che appare in guide più vecchie è mettere un .htaccess separato direttamente in wp-content/uploads/ con un lungo elenco di regole. L'intento è buono, ma gli effetti collaterali sono disordinati: a seconda di cosa contengono le regole, gli upload di immagini possono smettere di caricarsi, il lazy loading può rompersi, o i PDF possono diventare inaccessibili. Se vuoi solo disabilitare il listing, la singola riga Options -Indexes nel .htaccess principale è sufficiente. Funziona ricorsivamente. File separati per cartella non sono necessari, a meno che tu non abbia una ragione specifica.

E nascondere i file anche ai motori di ricerca?

Disabilitare il directory listing impedisce che venga servito l'indice della cartella, ma non impedisce a un motore di ricerca di indicizzare singoli file nella cartella se sono collegati da qualche parte dal web pubblico. Se hai file sensibili in wp-content/uploads/ che non vuoi che appaiano in Google, eliminare il file è l'unica risposta affidabile. Meta tag noindex, regole header X-Robots-Tag e voci robots.txt aiutano nella scoperta, ma solo eliminare i file garantisce che il contenuto sia sparito.

La regola generale che vale sempre per la cartella uploads: non caricare lì nulla che non ti sentiresti a tuo agio di vedere sulla prima pagina del tuo sito. La cartella è per design una cartella web pubblica.

Come verificare la tua configurazione

  1. Apri https://tuodominio.it/wp-content/uploads/ in una finestra privata. Risultato atteso: una pagina 403 Forbidden o una pagina bianca (a seconda che sia presente un index.html vuoto).
  2. Ripeti per qualsiasi altra cartella che hai trovato in precedenza (/wp-content/plugins/, cartelle dei temi, cartelle di upload personalizzate).
  3. Se vedi un elenco di file, la modifica non è stata applicata. Controlla che tu abbia modificato il .htaccess corretto (la versione nella root di WordPress, non quella nella cartella superiore dell'installazione WordPress) e svuota eventuali strati di cache.
  4. Esegui una nuova scansione InspectWP. Il controllo "directory listing abilitato" nella sezione sicurezza dovrebbe essere verde.

L'intera modifica è una singola riga in .htaccess su Apache, o un'impostazione di configurazione su nginx. Cinque secondi di lavoro, e un'intera classe di esposizione involontaria di file scompare. Vale la pena farlo su ogni sito, anche se tutto nella tua cartella uploads è attualmente a posto. La protezione è per il prossimo file che qualcuno carica in fretta, non solo per i file che sono già lì.

Controlla subito il tuo sito WordPress

InspectWP analizza il tuo sito WordPress per problemi di sicurezza, problemi SEO, conformità GDPR e prestazioni — gratuitamente.

Analizza gratis il tuo sito