Tutte le guide
Gravità MedioGestione di file, percorsi e risorse

Indici di directory aperti: quando il tuo file server elenca tutto

Quando l'indicizzazione delle directory è attiva, visitare un percorso come /uploads/ restituisce un elenco navigabile di tutti i file della directory invece di un 403 o 404. Gli attaccanti guardano qui per primi, perché archivi di backup, file di log e contenuti caricati dagli utenti vengono spesso lasciati leggibili da chiunque in directory servite dal web.

Che cos'è

Il directory listing (detto anche directory indexing) è una funzione del web server che genera un file browser HTML quando viene richiesta una directory priva di file indice. Attivo di default in alcune configurazioni di nginx (autoindex on) e in Apache (Options +Indexes), è una comodità per gli host statici che diventa un problema ovunque i file non debbano essere pubblici.

AppSafe controlla una serie di percorsi spesso configurati male — /uploads/, /files/, /backup/, /backups/, /logs/ e /tmp/ — e segnala quelli che restituiscono una risposta riconoscibile come directory listing. Anche una sola directory aperta può esporre dati mai pensati per essere trovati.

Perché è importante

Le directory esposte contengono abitualmente file caricati dagli utenti, dump del database compressi, log applicativi con credenziali o token di sessione e archivi del sorgente rimasti dai deploy. Trovarli non richiede autenticazione né exploit — basta digitare l'URL.

Gli scanner automatici sondano di continuo gli stessi percorsi noti che controlla AppSafe, su ogni host raggiungibile. Una directory /backup/ aperta che contiene un dump .sql.gz equivale di fatto a un export completo del database consegnato senza password.

Come risolverlo

Disattivare autoindex in nginx

Rimuovi o disattiva esplicitamente la direttiva autoindex in ogni blocco server o location che serve directory controllate dagli utenti.

location /uploads/ {
  autoindex off;
  # Serve individual files but never list directory contents
}
Spostare le directory sensibili fuori dalla web root

La soluzione più sicura è archiviare upload, backup e log in una directory che il web server non serve affatto. L'applicazione legge e invia i file tramite una route autenticata — il percorso grezzo sul filesystem non è mai raggiungibile.

In Next.js, proteggere l'accesso ai file con un route handler

Non mettere mai upload degli utenti o backup nella directory public/. Servili tramite una route API che possa imporre l'autenticazione e sanificare il percorso richiesto.

// app/api/uploads/[filename]/route.ts
import { getSession } from "@/lib/auth-session";
import { readFile } from "fs/promises";
import path from "path";

export async function GET(
  _req: Request,
  { params }: { params: { filename: string } }
) {
  const session = await getSession();
  if (!session) return new Response(null, { status: 401 });

  // path.basename prevents directory traversal
  const safe = path.basename(params.filename);
  const filePath = path.join(process.cwd(), "private-uploads", safe);
  const data = await readFile(filePath);
  return new Response(data);
}
Proteggere gli endpoint di listing interni con l'autenticazione

Se ti serve davvero un'interfaccia navigabile per i file (una libreria multimediale, un visualizzatore di log interno), proteggi il percorso con l'autenticazione invece di affidarti all'oscurità.

location /logs/ {
  autoindex on;
  auth_basic "Internal only";
  auth_basic_user_file /etc/nginx/.htpasswd;
}

FAQ

Il directory listing è sempre un problema, o solo su certi percorsi?

È un problema ovunque i file contengano qualcosa di sensibile. Una CDN pubblica che serve immagini statiche con l'indicizzazione attiva di solito è innocua; /logs/, /backup/ e /uploads/ quasi mai, perché accumulano file non verificati per l'accesso pubblico.

Posso semplicemente mettere un index.html vuoto nella directory per bloccare il listing?

Così nascondi il listing di quella sola directory, ma ogni sottodirectory resta aperta. È anche facile dimenticarsene quando si creano nuove directory. Disattivare autoindex a livello di server è una correzione affidabile, a livello di configurazione, che copre tutto ciò che sta sotto.

Quale severità segnala AppSafe per un indice di directory aperto?

Media. Il listing in sé non è la compromissione — è la strada verso di essa. Una directory /backup/ navigabile con un dump del database o una directory /logs/ con token di autenticazione in chiaro va rapidamente oltre la severità media.

La tua app è interessata?

AppSafe controlla questo e decine di altri problemi in un'unica scansione gratuita.

Scansiona la mia app gratis