Config dosyalarında yer alan veritabanı bilgileri, yanlış dosya izinleri nedeniyle açığa çıkabilir. Güvenli izinler, yedek dosyalar ve sunucu kontrolleriyle riski azaltın.
Config dosyaları, bir uygulamanın veritabanına nasıl bağlanacağını belirleyen en kritik ayarları içerir. Bu dosyalarda genellikle veritabanı adı, kullanıcı adı, parola, sunucu adresi, port bilgisi ve bazen API anahtarları yer alır. Dosya izinleri yanlış yapılandırıldığında bu bilgiler yalnızca uygulama tarafından okunmakla kalmaz; aynı sunucudaki başka kullanıcılar, hatalı yapılandırılmış servisler veya dışarıdan dosyaya erişebilen kişiler tarafından da görüntülenebilir hale gelebilir.
Bu risk özellikle paylaşımlı hosting ortamlarında daha hassastır. Çünkü aynı fiziksel ya da sanal kaynak üzerinde birden fazla hesap çalışabilir. Yanlış izin verilen bir config dosyası, doğrudan veritabanı sızıntısına, yetkisiz sorgulara, veri silinmesine veya uygulama yönetiminin ele geçirilmesine kadar uzanan ciddi sonuçlar doğurabilir.
Config dosyaları farklı teknolojilerde farklı isimlerle karşınıza çıkabilir. PHP projelerinde config.php, WordPress’te wp-config.php, Laravel’de .env, Node.js projelerinde ise .env veya benzer yapılandırma dosyaları kullanılır. İsim değişse de temel işlev aynıdır: Uygulamanın çalışması için gerekli gizli bağlantı bilgilerini saklamak.
Tipik bir yapılandırma dosyasında şu bilgiler bulunabilir:
Bu bilgilerin açığa çıkması, yalnızca web sitesinin değil, bağlı sistemlerin de risk altına girmesi anlamına gelir. Özellikle aynı parolanın farklı servislerde kullanıldığı yapılarda etki alanı hızla genişleyebilir.
Linux tabanlı sunucularda dosya izinleri genellikle okuma, yazma ve çalıştırma yetkileri üzerinden yönetilir. Config dosyasına gereğinden geniş okuma izni verildiğinde, dosyayı yalnızca web uygulaması değil, yetkisi olmaması gereken başka süreçler de okuyabilir.
Örneğin bir config dosyasının izni 644 olduğunda dosya sahibi yazabilir, grup ve diğer kullanıcılar okuyabilir. Bazı yapılarda bu kabul edilebilir görünse de paylaşımlı ortamlarda dikkatli değerlendirilmelidir. Daha riskli olan 666 veya 777 gibi izinlerdir; bu değerler dosyanın yalnızca okunmasını değil, değiştirilmesini de mümkün hale getirebilir.
Bir saldırgan dosyayı okuyabilirse veritabanı bağlantı bilgilerini alabilir. Dosyayı değiştirebilirse uygulamayı farklı bir veritabanına yönlendirebilir, zararlı kod ekleyebilir veya site davranışını manipüle edebilir.
Bazı durumlarda sorun yalnızca izinlerden değil, dosyanın yanlış dizinde tutulmasından kaynaklanır. Config dosyası doğrudan web kök dizininde yer alıyor ve sunucu bu dosyayı doğru şekilde işlemiyorsa, dosya tarayıcı üzerinden indirilebilir. Özellikle yedek dosyalar bu noktada sık görülen bir hatadır: config.php.bak, wp-config.old veya .env.save gibi dosyalar sunucu tarafından kod olarak çalıştırılmayabilir ve düz metin olarak görüntülenebilir.
Veritabanı bilgilerinin ele geçirilmesi, yalnızca teknik bir güvenlik açığı değildir; iş sürekliliğini, müşteri güvenini ve yasal yükümlülükleri etkileyebilir. Saldırgan veritabanına bağlanabildiğinde kullanıcı kayıtlarını okuyabilir, yönetici hesaplarını değiştirebilir, içerikleri silebilir veya zararlı yönlendirmeler ekleyebilir.
E-ticaret, üyelik sistemi veya kurumsal portal gibi yapılarda bu durum kişisel verilerin açığa çıkmasına neden olabilir. Android uygulamalarının bağlı olduğu API altyapılarında da benzer riskler vardır. Mobil uygulama güvenli görünse bile arka taraftaki sunucu config dosyaları zayıfsa, uygulamanın kullandığı veriler tehlikeye girebilir.
Genel yaklaşım, config dosyalarına yalnızca gerçekten ihtiyaç duyan kullanıcı ve servislerin erişebilmesidir. Çoğu PHP tabanlı yapıda dosya için 600 veya 640 gibi daha kısıtlı izinler tercih edilir. Ancak doğru değer, kullanılan sunucu mimarisine, web servis kullanıcısına ve uygulama çalışma modeline göre değişebilir.
Pratik bir kontrol için şu sorular sorulmalıdır:
Bu sorular, yalnızca dosya iznini değil, erişim modelini de doğru tasarlamaya yardımcı olur. Güvenli bir hosting yönetiminde dosya izni, veritabanı yetkisi ve dizin erişimi birlikte ele alınmalıdır.
Bir dosya ya da klasör çalışmadığında hızlı çözüm olarak 777 izni vermek yaygın ama tehlikeli bir alışkanlıktır. Bu izin, herkese okuma, yazma ve çalıştırma yetkisi verir. Config dosyalarında bu tercih edilmemelidir.
Güncelleme öncesi alınan yedeklerin web dizininde unutulması ciddi bir risktir. .bak, .old, .backup uzantılı dosyalar düzenli olarak kontrol edilmeli ve erişilebilir dizinlerde tutulmamalıdır.
Uygulamanın yalnızca okuma ve yazma yapması gerekiyorsa, veritabanı kullanıcısına gereksiz yönetici yetkileri verilmemelidir. Yetki sınırlandırması, config bilgileri sızsa bile zararın kapsamını azaltır.
Config dosyalarını mümkün olduğunca web kök dizininin dışında tutmak iyi bir başlangıçtır. Bu mümkün değilse dizin kuralları, dosya izinleri ve sunucu yapılandırması birlikte kontrol edilmelidir. Ayrıca config dosyalarının sürüm kontrol sistemlerine yanlışlıkla yüklenmemesi için gerekli dışlama kuralları uygulanmalıdır.
Parolalar düzenli aralıklarla yenilenmeli, özellikle bir şüphe oluştuğunda yalnızca dosya izni düzeltilmekle yetinilmemelidir. Veritabanı parolası değiştirilmeli, erişim günlükleri incelenmeli ve beklenmeyen bağlantılar araştırılmalıdır. Böylece yanlış izin nedeniyle oluşan açık kapatılırken, daha önce gerçekleşmiş olası erişimler de değerlendirilmiş olur.
Kurumsal projelerde güvenlik kontrol listesine config dosyaları için ayrı bir madde eklemek faydalıdır. Dosya sahibi, izin değeri, dizin konumu, yedek dosya durumu ve veritabanı kullanıcı yetkileri düzenli olarak gözden geçirildiğinde, küçük bir yapılandırma hatasının kritik veri sızıntısına dönüşme ihtimali önemli ölçüde azalır.