Tarayıcınıza sitenizin bir klasör adresini yazdığınızda, örneğin https://siteniz.com/yuklemeler/, bazen karşınıza düzgün bir sayfa yerine o klasörün içindeki bütün dosyaların çıplak bir listesi çıkar: dosya adları, boyutları, son değiştirilme tarihleri ve her birine tıklanabilir bağlantılar. Bu, sunucunun "dizin listelemesi" (directory listing) dediğimiz varsayılan davranışıdır. Klasörde bir index.html ya da index.php dosyası yoksa web sunucusu, gösterecek bir şey bulamadığında klasörün içeriğini otomatik olarak listeler. Bu davranış geliştiriciye kolaylık gibi görünse de, üretim ortamında sitenizin iç yapısını ziyaretçilere ve kötü niyetli tarayıcılara açık bir davetiye gibi sunar.
cPanel'in Index Manager (Dizin Yöneticisi) aracı, tam olarak bu davranışı klasör klasör kontrol etmenizi sağlar. Tek bir arayüzden, sitenizin herhangi bir dizinini seçip o klasörde listelemenin nasıl davranacağını belirleyebilirsiniz: hiç listeleme yapılmasın (No Indexing), sunucunun varsayılanı kullanılsın ya da sade veya süslü bir dosya listesi gösterilsin. Arka planda araç yaptığınız seçimi .htaccess dosyanıza Options yönergesi olarak yazar; yani teknik olarak Apache'nin autoindex modülünü klasör bazında açıp kapatmış olursunuz. Bu rehberde dizin listelemesinin neden bir güvenlik riski olduğunu, Index Manager'ın dört seçeneğini, aracın ürettiği .htaccess satırlarını ve hangi klasörlerde listelemeyi mutlaka kapatmanız gerektiğini çalışan örneklerle ele alacağız.
Dizin Listelemesi (Directory Listing) Nedir?#
Bir web sunucusuna bir klasör adresi istendiğinde, sunucu önce o klasörde bir "dizin dosyası" arar. Apache'de bu dosyaların adları DirectoryIndex yönergesiyle belirlenir ve tipik olarak index.html, index.htm, index.php gibi isimlerdir. Sunucu bu dosyalardan birini bulursa onu ziyaretçiye gösterir ve klasörün geri kalanı gizli kalır. Bulamazsa iki seçeneği vardır: ya bir hata döndürür ya da klasörün içeriğini otomatik olarak listeler. İşte bu ikinci davranış, dizin listelemesidir ve Apache'de mod_autoindex modülü tarafından üretilir.
Otomatik üretilen bu liste, klasördeki her dosyayı ad, boyut ve tarih sütunlarıyla gösterir ve her satır tıklanabilir bir bağlantıdır. Yani ziyaretçi, sitenizde hiçbir sayfaya bağlantı verilmemiş olsa bile, klasör adresini tahmin ederek içindeki tüm dosyaları görebilir ve indirebilir. Geliştirme aşamasında bu pratik bir özelliktir; bir dosya sunucusu ya da açık arşiv kurmak istiyorsanız bilinçli bir tercih de olabilir. Ancak sıradan bir web sitesinde ziyaretçinin görmesi gereken tek şey sizin tasarladığınız sayfalardır, dosya sisteminizin ham hâli değil. Bu ayrımı netleştirmek, Index Manager'ın neden var olduğunu anlamanın anahtarıdır. cPanel'in genel mantığına henüz yabancıysanız /wiki/cpanel-nedir yazısı iyi bir başlangıç noktasıdır.
Dizin Listelemesi Neden Güvenlik Riski Oluşturur?#
Dizin listelemesinin açık kalması, tek başına bir "güvenlik açığı" değildir; sonuçta gösterilen dosyalar zaten web üzerinden erişilebilir dosyalardır. Ama pratikte ciddi bir bilgi sızması (information disclosure) kaynağıdır, çünkü saldırganın en çok ihtiyaç duyduğu şeyi hediye eder: keşif. Normalde bir saldırganın sitenizde hangi dosyaların bulunduğunu bilmesi gerekir; listeleme açıksa, tahmin etmesine gerek kalmadan klasör içeriğini olduğu gibi okur.
Somut riskleri sıralayalım. Yedekleme alışkanlığıyla klasörde unutulmuş bir veritabani-yedek.sql ya da site-yedek.zip dosyası, listeleme açıkken tek tıkla indirilebilir hâle gelir ve içindeki tüm veriler ele geçirilir. Sürüm kontrolünden kalan bir .git klasörü ya da editör yedekleri (config.php.bak, wp-config.php~ gibi) yapılandırma sırlarınızı, veritabanı parolalarınızı ifşa eder. Yükleme klasörlerinizdeki dosya adları görülünce, kişisel veri içeren belgeler (fatura PDF'leri, kimlik fotoğrafları) numaralandırma yoluyla toplanabilir. Ayrıca dizin ağacını görebilen bir saldırgan, kullandığınız yazılımların ve eklentilerin sürümlerini tahmin ederek bilinen zafiyetlere yönelik hedefli saldırılar planlar. Bu yüzden dizin listelemesini kapatmak, güvenlik sertleştirmesinin (hardening) temel adımlarından biri kabul edilir.
Aşağıdaki tablo, listeleme açıkken sızabilecek tipik dosya türlerini ve bunların neden tehlikeli olduğunu özetler:
| Sızabilecek dosya | Nerede bulunur | Neden tehlikeli |
|---|---|---|
*.sql, *.zip yedekleri | Kök ya da yükleme klasörleri | Tüm veritabanı ve site içeriği indirilebilir |
.env, config.php.bak | Uygulama kök dizini | Veritabanı parolası ve API anahtarları ifşa olur |
.git/, .svn/ | Sürüm kontrolü artıkları | Tüm kaynak kod geçmişi çekilebilir |
| Yüklenen belgeler | /uploads, /dosyalar | Kişisel veriler numaralandırılabilir |
| Log ve hata dosyaları | Çeşitli klasörler | İç yol yapısı ve hata detayları görünür |
cPanel Index Manager'ı Adım Adım Kullanma#
Index Manager, cPanel ana ekranında Files (Dosyalar) bölümünün altında yer alır. Aracı kullanmak için şu adımları izleyin:
- Hosting hesabınızın cPanel arayüzüne giriş yapın.
- Ana ekrandaki arama kutusuna "Index" yazın veya
Dosyalarbölümüne inip Directory Privacy ile karıştırmadan Index Manager ikonuna tıklayın. - Karşınıza bir klasör gezgini çıkar. Ayarını değiştirmek istediğiniz klasöre tıklayarak içine girin; ayarlamak istediğiniz dizine ulaştığınızda satırın sonundaki Edit (Düzenle) bağlantısına ya da klasör adına tıklayın.
- Açılan ekranda dört seçenek göreceksiniz: Default System Setting, No Indexing, Standard Indexing (text only) ve Fancy Indexing (graphics).
- İhtiyacınıza uygun seçeneği işaretleyin. Güvenlik amacıyla en sık seçilen No Indexing olacaktır.
- Save (Kaydet) düğmesine basın.
Kaydettiğiniz anda cPanel, seçtiğiniz klasördeki .htaccess dosyasına ilgili Options satırını ekler ya da günceller. Değişiklik anında geçerli olur; klasör adresini tekrar ziyaret ettiğinizde artık seçtiğiniz davranışı görürsünüz. Önemli bir ayrıntı: Index Manager'daki bir seçim yalnızca o klasör ve alt klasörleri için geçerlidir. Yani public_html kökünde yaptığınız ayar, aksini belirtmediğiniz sürece tüm alt dizinlere miras kalır; ama tek bir alt klasörde farklı bir seçim yaparsanız o klasör için üstteki ayar geçersiz kılınır. Bu miras mantığı, .htaccess dosyalarının klasör hiyerarşisinde nasıl çalıştığıyla birebir aynıdır ve /wiki/htaccess-yonlendirme yazısında bu davranışın temelini bulabilirsiniz.
Dört Görünüm Seçeneğini Anlamak#
Index Manager'ın sunduğu dört seçenek, aslında Apache'nin autoindex davranışının farklı modlarına karşılık gelir. Hangisini ne zaman seçeceğinizi bilmek, aracı doğru kullanmanın özüdür. Seçenekleri tek tek inceleyelim.
Default System Setting (Varsayılan Sistem Ayarı): Bu seçenek, klasöre özel bir kural yazmaz; sunucunun genel yapılandırmasında ne tanımlıysa o geçerli olur. Barındırma sağlayıcınız sunucu genelinde listelemeyi kapatmışsa bu güvenli bir seçimdir; ama açık bırakmışsa klasörünüz de listelenir. Yani davranışı sunucu politikasına devreder, kesin bir garanti vermez.
No Indexing (İndeksleme Yok): En güvenli ve en sık önerilen seçenek budur. Klasörde bir dizin dosyası yoksa, sunucu içeriği listelemek yerine bir 403 Forbidden hatası döndürür. Ziyaretçi klasör adresini yazsa bile içindeki dosyaları göremez. Neredeyse tüm yükleme, yedek ve dahili klasörler için doğru tercih budur.
Standard Indexing (Standart, yalnızca metin): Klasörde dizin dosyası yoksa içerik listelenir, ama sade bir metin tablosu olarak. Dosya türü ikonları olmaz. Bilinçli olarak bir açık dosya listesi sunmak istediğiniz nadir durumlar için uygundur.
Fancy Indexing (Süslü, grafikli): Standart listelemenin görsel açıdan zenginleştirilmiş hâlidir; dosya türüne göre ikonlar, sıralanabilir sütun başlıkları ve daha okunaklı bir düzen gösterir. Bir dosya arşivi ya da indirme dizini kurarken tercih edilir.
Aşağıdaki tablo dört modu bir arada karşılaştırır:
| Seçenek | Dizin dosyası yokken davranış | Tipik kullanım |
|---|---|---|
| Default System Setting | Sunucu politikasına göre değişir | Sağlayıcı politikasına güveniyorsanız |
| No Indexing | 403 Forbidden döner, hiçbir şey listelenmez | Yükleme, yedek, dahili klasörler (güvenli varsayılan) |
| Standard Indexing | Sade metin listesi gösterir | Bilinçli, sade bir açık dosya listesi |
| Fancy Indexing | İkonlu, sütunlu görsel liste | İndirme arşivi, açık dosya deposu |
Pratikte kararınızı basit bir soruyla verebilirsiniz: "Bu klasörün içeriğini herhangi bir ziyaretçinin görmesinde bir sakınca var mı?" Cevabınız evetse ya da tereddütlüyseniz No Indexing seçin. Yalnızca gerçekten herkese açık bir dosya deposu kuruyorsanız Standard veya Fancy tercih edin.
Aracın .htaccess'e Yazdığı Kurallar#
Index Manager'ın güzel arayüzü, aslında .htaccess dosyanıza Options yönergesi yazan bir üreticiden ibarettir. Ne yaptığını anlamak, aracı arayüz olmadan da kullanabilmenizi ve sorunları ayıklayabilmenizi sağlar. No Indexing seçtiğinizde klasörünüzün .htaccess dosyasına şu satır eklenir:
Options -Indexes
Buradaki -Indexes ifadesi, Apache'ye "bu klasör için dizin listeleme özelliğini kapat" demektir. Baştaki eksi işareti özelliği devre dışı bırakır; artı işaretiyle (+Indexes) açmak da mümkündür. Standard Indexing seçtiğinizde ise araç tersini yazar ve süslü modu kapatır:
Options +Indexes
IndexOptions -FancyIndexing
Fancy Indexing seçiminde ise süslü mod açıkça etkinleştirilir:
Options +Indexes
IndexOptions +FancyIndexing
Bu satırları elle de yönetebilirsiniz. Örneğin cPanel'e her seferinde girmek yerine, bir dizinin .htaccess dosyasını /wiki/htaccess-yonlendirme yazısındaki yöntemlerle açıp doğrudan Options -Indexes satırını eklemeniz aynı sonucu verir. Listelemeyi kapatmanın yanında, klasörde hiç dizin dosyası olmasa bile ziyaretçiyi 403 yerine kendi tasarladığınız bir sayfaya göndermek isterseniz, hata belgesi tanımını da ekleyebilirsiniz:
Options -Indexes
ErrorDocument 403 /hata/erisim-yok.html
Bu blok, hem dizin listelemesini kapatır hem de engellenen erişimlerde ziyaretçiye markanıza uygun, açıklayıcı bir sayfa gösterir. Options yönergesinin bir klasörde tanımlanınca alt klasörlere miras kaldığını unutmayın; bu yüzden çoğu zaman tek bir üst dizinde -Indexes yazmak, altındaki onlarca klasörü bir arada korur.
Hangi Klasörlerde Dizin Listelemesini Kapatmalısınız?#
En temiz strateji, listelemeyi sitenizin kökünde (genellikle public_html) kapatıp, gerçekten açık olması gereken nadir klasörlerde bilinçli olarak yeniden açmaktır. Yani "varsayılan olarak kapalı, istisna olarak açık" yaklaşımı. Bununla birlikte, riski en yüksek belirli klasörleri özellikle gözden geçirmek gerekir. Aşağıda öncelik sırasıyla dikkat edilmesi gereken dizinler yer alır.
Öncelikli olarak yükleme ve medya klasörleri gelir: uploads, dosyalar, resimler, media gibi kullanıcıların ya da yöneticilerin dosya bıraktığı yerler. Bu klasörlerde çoğunlukla dizin dosyası bulunmaz ve içerikleri numaralandırmaya çok açıktır. İkinci sırada yedekleme ve dışa aktarma klasörleri vardır; bir .sql ya da .zip yedeğinin listelenebilir bir klasörde durması, en ciddi sızıntı türüdür. Üçüncü olarak yapılandırma, log ve geçici dosya klasörleri (config, logs, tmp, cache) hem hassas veri hem de iç yapı bilgisi taşır.
WordPress gibi hazır sistemler kullanıyorsanız, wp-content/uploads klasörü özellikle önem taşır. Çoğu kurulum bunu boş index.php dosyalarıyla korur, ama emin olmak için köke bir Options -Indexes koymak akıllıcadır. WordPress'e özgü sertleştirme adımları için /wiki/htaccess-yonlendirme yazısındaki örnekleri temel alabilir, kurumsal WordPress bakımını profesyonellere bırakmak isterseniz /wordpress-bakim hizmetine göz atabilirsiniz. Aşağıdaki kısa bash listesi, korumayı ihmal etmemeniz gereken klasörleri hatırlatır niteliktedir:
# Listelemesi mutlaka kapatılması gereken tipik klasörler
public_html/uploads # kullanıcı yüklemeleri
public_html/yedek # veritabanı ve site yedekleri
public_html/config # yapılandırma dosyaları
public_html/logs # log ve hata kayıtları
public_html/wp-content # WordPress medya ve eklentiler
public_html/tmp # geçici dosyalar
Bir dizinde listelemenin açık mı kapalı mı olduğunu hızlıca test etmek için tarayıcıdan klasör adresini ziyaret edebilir ya da komut satırından bir istek gönderebilirsiniz:
curl -sI https://siteniz.com/uploads/ | head -n 1
Dönen yanıt 403 Forbidden ise listeleme kapalıdır, güvendesiniz. 200 OK dönüyor ve klasörde dizin dosyası yoksa içerik listeleniyor demektir; o klasörde No Indexing'i etkinleştirmelisiniz.
Nginx ve Diğer Ortamlarda Autoindex'i Kapatma#
cPanel ve .htaccess dünyası Apache üzerine kuruludur. Bir VPS ya da özel sunucuda Nginx kullanıyorsanız .htaccess çalışmaz ve Options -Indexes bir anlam ifade etmez; çünkü Nginx bu ayarları çalışma anında dosyadan okumaz. Nginx'te dizin listelemesi zaten varsayılan olarak kapalıdır; yani açıkça açmadığınız sürece klasör içeriği listelenmez. Eğer bir yerde autoindex on; yazılmışsa listeleme açılır; kapatmak için bu satırı off yapmanız ya da tümüyle kaldırmanız yeterlidir:
location /uploads/ {
autoindex off;
}
Aynı şekilde bir sunucu genelinde listelemeyi kapalı tutmak için http, server ya da location bloklarında autoindex on; satırı bulunmadığından emin olun. Nginx yapılandırmasını değiştirdikten sonra nginx -t ile sözdizimini doğrulayıp servisi yeniden yüklemeyi (systemctl reload nginx) unutmayın. Kendi sunucu yapılandırmanızı yönetmek istemiyorsanız /sunucu-yonetimi hizmeti bu tür sertleştirme adımlarını sizin adınıza uygular; sıfırdan bir sunucu kuruyorsanız /sunucu/vds paketleri iyi bir başlangıçtır.
Katmanlı bir güvenlik istiyorsanız, dizin listeleme kontrolünü tek başına yeterli görmeyin. Bir uygulama güvenlik duvarı, yalnızca listelemeyi değil, hassas dosyalara ve klasörlere yönelik tarama denemelerini de filtreler. Bu tür otomatik keşif ve istismar girişimlerine karşı /waf hizmeti, .htaccess düzeyindeki korumanın üstüne ek bir savunma katmanı ekler. Sunucu düzeyinde bütünsel bir sertleştirme çerçevesi için ise güvenlik alışkanlıklarınızı düzenli olarak gözden geçirmeniz gerekir.
Sık Karşılaşılan Sorunlar ve Çözümleri#
Index Manager basit bir araç olsa da, .htaccess ile ilgili birkaç tipik sorunla karşılaşabilirsiniz. En yaygın olanı, ayarı kaydetmenize rağmen listelemenin hâlâ görünmesidir. Bunun en sık sebebi tarayıcı önbelleğidir; sayfayı sabit yenileme (Ctrl+F5) ile açın ya da gizli sekmede test edin. İkinci olası sebep, ayarı yanlış klasöre uygulamış olmanızdır; miras mantığı gereği üst klasörde +Indexes yazılıysa alt klasördeki ayarınızla çelişebilir, bu yüzden en üst dizinden başlayarak zinciri kontrol edin.
Bazı durumlarda tam tersi bir sorun görürsünüz: Options -Indexes yazdıktan sonra klasördeki bir sayfaya erişmeye çalıştığınızda 403 hatası alırsınız. Bu genellikle klasörde geçerli bir dizin dosyası (index.html/index.php) bulunmamasından kaynaklanır; listeleme kapalı olduğu için sunucunun gösterecek bir şeyi kalmaz ve erişimi reddeder. Çözüm, o klasöre bir dizin dosyası koymak ya da erişimi bir üst sayfaya yönlendirmektir. Nadiren, barındırma sağlayıcınız güvenlik gerekçesiyle .htaccess içinde Options yönergesini kısıtlamış olabilir; bu durumda AllowOverride sınırlaması nedeniyle satır yok sayılır ve genellikle 500 Internal Server Error alırsınız. Böyle bir hatada hata kayıtlarına bakmak sizi doğrudan sebebe götürür.
Sorunun kaynağını ayıklarken sunucunun hata günlüğü en güvenilir rehberinizdir; hangi yönergenin reddedildiğini ya da hangi dosyanın eksik olduğunu orada net biçimde görürsünüz. cPanel üzerinde bu kayıtlara nasıl ulaşacağınızı öğrenmek için hata kayıtları rehberimize göz atabilir, .htaccess sözdizimi denemelerinizden önce mevcut dosyanızın yedeğini almayı /yedekleme alışkanlığınızın bir parçası hâline getirebilirsiniz. Küçük bir .htaccess hatası bile tüm siteyi 500 hatasına düşürebildiği için, değişiklik yapmadan önce dosyanın bir kopyasını saklamak size çok zaman kazandırır.
Sıkça Sorulan Sorular#
No Indexing ile Directory Privacy arasındaki fark nedir?#
Bu ikisi sık karıştırılır ama farklı işler yapar. No Indexing (Index Manager), bir klasörde dizin dosyası olmadığında içeriğin listelenmesini engeller; ama içindeki dosyalara doğrudan adresiyle erişimi engellemez, yani dosya adını bilen biri onu yine açabilir. Directory Privacy (Dizin Gizliliği) ise klasörün tamamını kullanıcı adı ve parola sorarak korur; içeri girmek için kimlik doğrulaması gerekir. Yani biri "listeyi gizler", diğeri "kapıya kilit takar". Gerçekten hassas bir klasörünüz varsa ikisini birlikte kullanmak en güçlü yaklaşımdır.
Dizin listelemesini kapatmak SEO'yu etkiler mi?#
Hayır, olumsuz bir etkisi yoktur; aksine faydalıdır. Arama motorları sitenizi tasarladığınız sayfalar ve bağlantılar üzerinden tarar, ham klasör listeleri üzerinden değil. Dizin listeleme sayfaları genellikle düşük değerli, yinelenen içerik olarak görülür ve bunların indekslenmesi istenmez. Listelemeyi kapatarak arama motorlarının yalnızca gerçek içeriğinize odaklanmasını sağlarsınız. Genel arama görünürlüğünüzü iyileştirmek için ayrı bir strateji izlemek istiyorsanız /seo tarafındaki hizmetleri değerlendirebilirsiniz.
Klasörde index.php varsa yine de No Indexing seçmeli miyim?#
Şart değildir, çünkü geçerli bir dizin dosyası (index.php ya da index.html) varken sunucu zaten listeleme yapmaz, onun yerine o dosyayı gösterir. Ancak No Indexing'i yine de eklemek zararsız ve tavsiye edilen bir güvenlik alışkanlığıdır: bir gün o dizin dosyası silinir, yeniden adlandırılır ya da bir güncelleme sırasında kaybolursa, Options -Indexes satırı klasörünüzün istemeden listelenmeye başlamasını engeller. Yani boş index.php dosyaları bir savunma katmanıysa, No Indexing ikinci ve daha kalıcı bir katmandır.
Tüm siteyi tek seferde nasıl korurum?#
En pratik yol, sitenizin kök dizininde (genellikle public_html) tek bir kez No Indexing seçmektir. Options -Indexes yönergesi alt klasörlere miras kaldığı için, bu tek ayar altındaki tüm dizinleri kapsar. Ardından yalnızca gerçekten açık liste göstermesi gereken belirli bir klasör varsa, o klasöre girip bilinçli olarak Standard ya da Fancy Indexing seçebilirsiniz. Bu "kökte kapat, istisnada aç" yaklaşımı, her klasörü tek tek dolaşmaktan çok daha güvenli ve yönetilebilirdir.
Index Manager'da yaptığım değişikliği nasıl geri alırım?#
Geri almanın iki yolu vardır. Birincisi, cPanel'de aynı klasöre dönüp seçeneği tekrar Default System Setting olarak işaretleyip kaydetmektir; bu, araç tarafından eklenen Options satırını kaldırır ya da nötrler. İkincisi, klasördeki .htaccess dosyasını /wiki/htaccess-yonlendirme yazısındaki yöntemlerle açıp ilgili Options -Indexes veya IndexOptions satırını elle silmektir. Her iki durumda da değişiklik anında geçerli olur; test etmeden önce tarayıcı önbelleğinizi temizlemeyi ve dosyanın bir yedeğini almayı unutmayın.
Kapanış#
Dizin listelemesini kapatmak, dakikalar süren ama sitenizin iç yapısını meraklı gözlerden ve otomatik tarayıcılardan koruyan temel bir sertleştirme adımıdır. cPanel Index Manager, bu işi klasör klasör ve tek tıkla yapmanızı sağlar; arka planda ürettiği Options -Indexes satırını anlamak ise size istisnalar tanımlama, kendi hata sayfanızı gösterme ve aynı mantığı Nginx gibi farklı ortamlara taşıma esnekliği kazandırır. Doğru yaklaşım nettir: kökte listelemeyi kapatın, yalnızca gerçekten açık olması gereken klasörlerde bilinçli olarak yeniden açın ve yükleme, yedek, yapılandırma klasörlerinizi asla listelenebilir bırakmayın.
Bu tür güvenlik araçlarının eksiksiz desteklendiği, .htaccess ve Index Manager'ın tam çalıştığı bir altyapı arıyorsanız Clou.TR'nin /hosting paketleri ve WordPress siteleri için özel olarak yapılandırılmış /hosting/wordpress çözümleri güçlü bir başlangıçtır. Kendi sunucu yapılandırmanızı yönetmek istiyorsanız /sunucu/vds sunucularımıza göz atabilir, otomatik keşif ve istismar denemelerine karşı /waf katmanını ekleyebilir, olası hatalara karşı düzenli /yedekleme planlarımızla verilerinizi güvenceye alabilirsiniz. Sunucu sertleştirmesinde daha kapsamlı bir el uzatma isterseniz /sunucu-yonetimi ekibimiz her adımda yanınızda.