.htaccess ile Dizin Listelemeyi (Directory Indexing) Kapatma ve Güvenlik

Özet: Web sunucunuzda dizin listeleme (directory indexing) etkinse, ziyaretçiler dizindeki dosyaları görebilir; bu durum bilgi sızıntısına, hassas dosyaların açığa çıkmasına ve saldırı yüzeyinin genişlemesine yol açar. Bu makalede .htaccess kullanarak Apache üzerinde dizin listelemeyi nasıl güvenli biçimde devre dışı bırakacağınızı, alternatif sunucu ayarlarını ve test/denetim yöntemlerini bulacaksınız.

Neden dizin listelemeyi kapatmalısınız?

  • Bilgi sızıntısı: Kaynak kod, yedek dosyalar, yapılandırma dosyalarının ismi ve konumu ortaya çıkabilir.
  • Hızlı keşif (reconnaissance): Saldırganlar dizinin içeriğini kullanarak zafiyet arayışına başlayabilir.
  • Yanlış yapılandırma riskleri: Test/backup dosyaları, .env ve SQL dökümleri yanlışlıkla erişilebilir hale gelebilir.
  • Uygulama güvenliğini zayıflatma: Gereksiz meta-bilgi saldırı vektörlerini artırır.

Apache/.htaccess ile dizin listelemeyi kapatma

Paylaşılan hostinglerde veya AllowOverride yetkisi verilen sunucularda kök dizine (veya ilgili alt dizine) yerleştireceğiniz .htaccess dosyasıyla dizin listelemeyi kolayca kapatabilirsiniz. En basit ve yaygın çözüm:

Adımlar

  • .htaccess dosyasını proje köküne veya korunmasını istediğiniz dizine koyun.
  • Aşağıdaki satırı ekleyin: Options -Indexes
  • Alternatif olarak listelemeyi gizlemek için IndexIgnore * kullanılabilir; bu, dosya isimlerini gizler ama bazı durumlarda farklı davranış gösterebilir.
  • Sunucu düzeyinde AllowOverride kısıtlamaları varsa, apache2.conf veya httpd.conf içinden değişiklik yapmanız gerekir. (Örneğin AllowOverride None olan dizinlerde .htaccess çalışmaz.)

Örnek .htaccess içeriği

# Dizin listelemeyi kapat
Options -Indexes

# Bazı hassas dosya türlerine doğrudan erişimi engelle

    Require all denied


# İsteğe bağlı: dizinde index dosyası yoksa belirli bir dosyaya yönlendir
DirectoryIndex index.php index.html

Not: Apache 2.2 ve 2.4 arasında yetkilendirme satırları değişebilir. Apache 2.4 için Require all denied kullanılırken, eski sürümlerde Order allow,deny ve Deny from all kullanılabilir.

Sunucu düzeyinde alternatifler

Her platform için .htaccess kullanımı uygun olmayabilir. Önemli alternatifler:

Nginx

  • Nginx .htaccess desteklemez; ana konfigürasyonda ilgili blokta autoindex off; koymalısınız.
server {
    location / {
        autoindex off;
        # diğer ayarlar
    }
}

IIS (Windows Server)

  • IIS yöneticisinden "Directory Browsing" özelliğini kapatabilirsiniz veya web.config ile aşağıdaki gibi etkinliği devre dışı bırakabilirsiniz.
<configuration>
  <system.webServer>
    <directoryBrowse enabled=\"false\" />
  </system.webServer>
</configuration>

Doğrulama ve test

Dizin listelemenin kapandığını doğrulamak için:

  • Tarayıcıda dizin URL'sine gidin (ör. https://site.com/uploads/). Beklenen davranış: 403/404 döndürme veya index dosyasına yönlendirme; dosya listesi gösterilmemeli.
  • curl ile kontrol: curl -I https://site.com/some-folder/ — cevap başlıklarını inceleyin (403/200 gibi, fakat içerik listesi olmamalı).
  • Sunucu loglarını ve erişim kayıtlarını gözden geçirerek beklenmeyen erişimler olup olmadığını kontrol edin.

İyi uygulamalar (Best practices)

  • Her dizinde bir index dosyası (index.php/index.html) bulundurun; böylece dizin boş olsa bile listeleme oluşmaz.
  • Hassas dosya türlerini doğrudan erişime kapatın (ör. .env, .git, yedekler).
  • Yedek ve geliştirme dosyalarını dağıtıma dahil etmeyin.
  • Sunucu yapılandırmasını düzenli taramalarla doğrulayın; AllowOverride ayarlarını bilin.
  • Dosya yükleme alanlarında dosya türü ve içerik doğrulaması yapın; yüklenen dosyalara doğrudan yürütme izni vermeyin.
  • Güvenlik duvarı, WAF ve log analitiği ile olağan dışı tarama aktivitelerini izleyin.

Sonuç

Dizin listelemenin kapatılması, düşük maliyetle uygulanabilecek ve uygulama saldırı yüzeyini ciddi oranda azaltabilecek temel bir güvenlik önlemidir. Paylaşılan hostinge veya proje dizinine .htaccess ekleyerek hızlıca devre dışı bırakılabilir; daha geniş kapsamdaki güvenlik için sunucu düzeyinde yapılandırma, dosya erişim politikaları ve sürekli izleme ile desteklenmelidir. Bu adımlar, bilgi sızıntısını azaltır, saldırganların keşif çabasını zorlaştırır ve genel güvenlik duruşunuzu güçlendirir.