Veritabanı şifresini uygulama dosyalarında güvenli tutmak için ortam değişkenleri, dosya izinleri, .env yönetimi ve sunucu kontrollerinde dikkat edilmesi gerekenler.
Veritabanı şifresi, bir uygulamanın en kritik erişim bilgilerinden biridir. Bu bilginin yanlış yerde tutulması; veri sızıntısı, yetkisiz erişim, servis kesintisi ve itibar kaybı gibi ciddi risklere yol açabilir. Özellikle web uygulamalarında yapılandırma dosyaları, sürüm kontrol sistemleri ve sunucu izinleri birlikte değerlendirilmeden yapılan küçük bir hata, üretim ortamındaki tüm veritabanını savunmasız bırakabilir.
Birçok projede veritabanı kullanıcı adı, şifre, host ve port bilgileri doğrudan config dosyalarına yazılır. Bu yöntem hızlı görünse de güvenlik açısından zayıftır. Dosya yanlışlıkla herkese açık dizine taşınabilir, yedek dosyalar indirilebilir durumda kalabilir veya kod deposuna gönderilebilir.
Özellikle ekip halinde geliştirilen projelerde, şifrenin kaynak kodla birlikte paylaşılması erişim kontrolünü zorlaştırır. Bir geliştiricinin hesabı ele geçirildiğinde sadece kod değil, üretim veritabanı bilgileri de risk altına girer. Bu nedenle hassas bilgiler uygulama kodundan ayrılmalı ve ortam bazlı yönetilmelidir.
Veritabanı şifresini uygulama dosyalarında güvenli tutmanın en yaygın ve pratik yolu ortam değişkenleridir. Bu yöntemde şifre kodun içinde yer almaz; uygulama, çalıştığı ortamdan gerekli bilgiyi okur. Böylece geliştirme, test ve canlı ortam için farklı bilgiler kullanılabilir.
PHP tabanlı bir uygulamada temel yaklaşım şu şekilde olabilir:
$dbHost = getenv('DB_HOST');
$dbName = getenv('DB_NAME');
$dbUser = getenv('DB_USER');
$dbPass = getenv('DB_PASSWORD');
$pdo = new PDO(
"mysql:host={$dbHost};dbname={$dbName};charset=utf8mb4",
$dbUser,
$dbPass,
[PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION]
);
Bu yapıda dikkat edilmesi gereken nokta, ortam değişkenlerinin web üzerinden erişilebilen bir dosyada tutulmamasıdır. Paylaşımlı hosting kullanılıyorsa kontrol panelinin sunduğu ortam değişkeni yönetimi, cron ortamı veya güvenli yapılandırma alanları tercih edilmelidir.
Modern uygulamalarda .env dosyaları sık kullanılır. Bu dosyalar doğru yapılandırıldığında kullanışlıdır; ancak yanlış konumlandırıldığında ciddi risk oluşturur. .env dosyası public_html, www veya benzeri herkese açık dizinlerin içinde bulunmamalıdır.
.env dosyasının Git gibi sürüm kontrol sistemlerine gönderilmesi en sık yapılan hatalardan biridir. Projede mutlaka .gitignore dosyası bulunmalı ve hassas yapılandırma dosyaları hariç tutulmalıdır. Bunun yerine .env.example gibi örnek bir dosya oluşturulabilir. Bu örnek dosyada gerçek şifreler değil, hangi değişkenlerin gerekli olduğunu gösteren boş değerler yer almalıdır.
Linux tabanlı bir sunucu üzerinde yapılandırma dosyalarının izinleri gereğinden geniş olmamalıdır. Örneğin sadece uygulamayı çalıştıran kullanıcı tarafından okunabilir olması yeterlidir. Genel okuma izni verilen dosyalar, aynı sunucuda bulunan farklı kullanıcılar veya hatalı çalışan servisler tarafından okunabilir.
WordPress’te veritabanı bilgileri genellikle wp-config.php dosyasında yer alır. Bu dosya web kök dizininde bulunsa da doğru sunucu yapılandırmasıyla doğrudan görüntülenemez. Yine de ek önlemler almak gerekir.
Güvenli saklama kadar şifrenin kalitesi de önemlidir. Veritabanı şifresi tahmin edilebilir kelimelerden, firma adından, alan adından veya kısa sayı dizilerinden oluşmamalıdır. Uzun, rastgele ve benzersiz şifreler kullanılmalıdır.
Canlı ortamda kullanılan şifreler geliştirici bilgisayarlarında, mesajlaşma uygulamalarında veya düz metin belgelerde paylaşılmamalıdır. Kurumsal yapılarda parola kasası kullanmak, yetkili kişileri sınırlamak ve erişim kayıtlarını izlemek daha güvenli bir model sağlar.
Uygulama dosyaları ne kadar iyi korunursa korunsun, sunucu yapılandırması zayıfsa risk devam eder. Veritabanı mümkünse dış dünyaya kapalı olmalı, yalnızca uygulama sunucusundan bağlantı kabul etmelidir. Uzak bağlantı gerekiyorsa IP kısıtlaması, VPN veya güvenli tünel tercih edilmelidir.
Hata mesajları da kontrol edilmelidir. Üretim ortamında ayrıntılı bağlantı hataları, dosya yolları veya kullanıcı bilgileri ekrana basılmamalıdır. Log kayıtları ise herkese açık dizinlerde tutulmamalı ve düzenli olarak izlenmelidir.
Bu kontroller düzenli uygulandığında veritabanı şifresi yalnızca gerekli servisler tarafından okunur, geliştirici süreçleri daha güvenli hale gelir ve olası bir dosya sızıntısında saldırganın doğrudan veritabanına erişme ihtimali belirgin şekilde azalır.