Otwarty directory listing
Co to jest
Katalog bez index.html lub index.php zamiast 404 lub przekierowania pokaże listę plików — klasyczny „Index of /uploads”. To domyślne zachowanie Apache (moduł autoindex), jeśli go jawnie nie wyłączysz.
Dlaczego to problem
Atakujący na początku rozpoznania szukają właśnie tego. Co mogą znaleźć:
- Kopie zapasowe —
db_backup.sql,site.tar.gz,old.zip. - Wcześniejsze wersje plików —
config.php.bak,wp-config.old. - Dokumenty prywatne — umowy, faktury, etykiety wysyłkowe, zrzut ekranu ze środowiska testowego.
- Skrypty wewnętrzne — debug, deploy, migration, które miały pozostać ukryte.
Nawet jeśli w katalogu „nie ma nic wrażliwego”, dajesz atakującemu mapę swojej aplikacji, której inaczej by nie miał. Każda wewnętrzna konwencja nazewnictwa (old_v2/, customer_export/) to podpowiedź.
Jak to naprawić
Apache
W konfiguracji głównej lub .htaccess:
# wyłącz autoindex globalnie
Options -IndexesJeśli masz własny VirtualHost:
<Directory /var/www/example.cz>
Options -Indexes +FollowSymLinks
</Directory>nginx
nginx ma autoindex domyślnie wyłączony — problem pojawia się, gdy ktoś go jawnie włączył. Szukaj w konfiguracji:
# usuń te wiersze:
autoindex on;Hosting współdzielony
Utwórz w katalogu pusty index.html:
echo "" > /var/www/example.cz/uploads/index.htmlTo szybka łatka — lepiej wyłączyć autoindex globalnie.
Weryfikacja
Wypróbuj kilka katalogów: curl -s https://example.cz/uploads/ | head -30. W odpowiedzi nie może być HTML z odnośnikami do plików.
Bonus: posprzątaj kopie zapasowe
Skoro już tam jesteś — przejrzyj wszystkie katalogi i usuń stare kopie zapasowe oraz pliki .bak. Nawet z wyłączonym autoindexem plik db.sql.bak jest dostępny, jeśli atakujący zgadnie nazwę.