Alle Guides
Schweregrad MittelDatei-, Pfad- & Ressourcen-Handling

Offene Verzeichnis-Indizes: wenn dein Dateiserver alles auflistet

Ist Directory Indexing aktiviert, liefert der Aufruf eines Pfads wie /uploads/ eine durchsuchbare Liste aller Dateien in diesem Verzeichnis statt eines 403 oder 404. Angreifer schauen hier zuerst nach, weil Backup-Archive, Logdateien und von Nutzern hochgeladene Inhalte regelmäßig öffentlich lesbar in per Web ausgelieferten Verzeichnissen liegen bleiben.

Was es ist

Directory Listing (auch Directory Indexing genannt) ist ein Webserver-Feature, das einen HTML-Dateibrowser erzeugt, wenn ein Verzeichnis angefragt wird und keine Index-Datei vorhanden ist. In manchen nginx-Konfigurationen (autoindex on) und in Apache (Options +Indexes) standardmäßig aktiv, ist es eine Bequemlichkeit für statische Hosts, die überall dort zum Risiko wird, wo Dateien nicht öffentlich sein sollten.

AppSafe prüft eine Reihe häufig falsch konfigurierter Pfade — /uploads/, /files/, /backup/, /backups/, /logs/ und /tmp/ — und meldet jeden, der eine erkennbare Verzeichnisliste zurückgibt. Schon ein einziges offenes Verzeichnis kann Daten preisgeben, die nie auffindbar sein sollten.

Warum es wichtig ist

Offene Verzeichnisse enthalten regelmäßig von Nutzern hochgeladene Dateien, komprimierte Datenbank-Dumps, Anwendungslogs mit Zugangsdaten oder Session-Tokens und Quellcode-Archive, die von Deploys übrig geblieben sind. Um sie zu finden, braucht es weder Authentifizierung noch einen Exploit — nur die eingetippte URL.

Automatisierte Scanner prüfen ununterbrochen dieselben bekannten Pfade wie AppSafe, bei jedem erreichbaren Host. Ein offenes /backup/-Verzeichnis mit einem .sql.gz-Dump ist faktisch ein vollständiger Datenbank-Export, der ohne Passwort übergeben wird.

So behebst du es

autoindex in nginx deaktivieren

Entferne die autoindex-Direktive oder schalte sie explizit aus — in jedem server- oder location-Block, der von Nutzern beeinflusste Verzeichnisse ausliefert.

location /uploads/ {
  autoindex off;
  # Serve individual files but never list directory contents
}
Sensible Verzeichnisse aus dem Web-Root verschieben

Die sicherste Lösung ist, Uploads, Backups und Logs in einem Verzeichnis zu speichern, das der Webserver überhaupt nicht ausliefert. Deine Anwendung liest und streamt Dateien über eine authentifizierte Route — der rohe Dateisystempfad ist nie erreichbar.

In Next.js den Dateizugriff hinter einen Route Handler legen

Lege Nutzer-Uploads oder Backups niemals ins public/-Verzeichnis. Liefere sie über eine API-Route aus, die Authentifizierung erzwingen und den angefragten Pfad bereinigen kann.

// 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);
}
Interne Listing-Endpunkte mit Authentifizierung schützen

Brauchst du tatsächlich eine durchsuchbare Dateioberfläche (eine Mediathek, einen internen Log-Viewer), schütze den Pfad mit Authentifizierung, statt dich darauf zu verlassen, dass ihn niemand findet.

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

FAQ

Ist Directory Listing immer ein Problem oder nur auf bestimmten Pfaden?

Es ist überall dort ein Problem, wo die Dateien etwas Sensibles enthalten. Ein öffentliches CDN, das statische Bilder mit aktiviertem Indexing ausliefert, ist meist harmlos; /logs/, /backup/ und /uploads/ sind es fast nie, weil sich dort Dateien ansammeln, die nie auf öffentliche Zugänglichkeit geprüft wurden.

Kann ich einfach eine leere index.html ins Verzeichnis legen, um das Listing zu blockieren?

Das versteckt das Listing für genau dieses eine Verzeichnis, lässt aber jedes Unterverzeichnis offen. Außerdem vergisst man es leicht, wenn neue Verzeichnisse angelegt werden. autoindex auf Server-Ebene auszuschalten, ist eine zuverlässige Lösung auf Konfigurationsebene, die alles darunter abdeckt.

Welchen Schweregrad meldet AppSafe für einen offenen Verzeichnis-Index?

Mittel. Das Listing selbst ist noch nicht die Kompromittierung — es ist der Weg dorthin. Ein durchsuchbares /backup/-Verzeichnis mit einem Datenbank-Dump oder ein /logs/-Verzeichnis mit Authentifizierungs-Tokens im Klartext geht schnell weit über „mittel“ hinaus.

Ist deine App betroffen?

AppSafe prüft dies und Dutzende weitere Probleme in einem kostenlosen Scan.

Meine App gratis scannen