Tüm rehberler
Kritik önem derecesiYapılandırma Hataları

Açıkta kalan .git dizini: göz önünde saklanan kaynak kodu sızıntısı

Bir web sunucusu .git dizinini uygulama dosyalarıyla birlikte sunduğunda, saldırgan tüm kaynak kodunu yeniden oluşturmaya yetecek kadar object indirebilir — sonraki bir commit'te kaldırılmış olsa bile şimdiye kadar commit'lenmiş her secret dahil. AppSafe bunu kritik olarak işaretler.

Nedir

Git, deponun tamamını — her dosyayı, her commit'i, her branch'in ucunu — proje kökündeki gizli .git dizininde saklar. Bu dizin web root'un içine düşerse ve sunucun erişimi engellemezse, /.git/config, /.git/HEAD ve /.git/objects/ altındaki object deposu herkese açık şekilde indirilebilir hale gelir.

Sızan bir .git dizininden tüm kaynak kodunu yeniden oluşturmak oldukça kolaydır. git-dumper gibi araçlar önce index'i çeker, ardından referans verilen her object'i indirerek tamamen çalışan bir checkout üretir. Saldırganların shell erişimine ihtiyacı yoktur — bir tarayıcı yeterlidir.

Neden önemli

Kaynak kodun neredeyse kesinlikle riski artıran bilgiler içerir: hardcode edilmiş API key'leri (genellikle eski commit'lerde), veritabanı şemaları, dahili endpoint yolları, iş mantığı ve kimlik doğrulama akışları. Şu anda commit'lenmiş hiçbir secret olmasa bile geçmiş, saldırganların istismar edebileceği malzemeyle doludur.

Git geçmişi tasarım gereği kalıcıdır. Yıllar önce commit'lenip sonra kaldırılan bir secret hâlâ object deposunda yaşar ve diğer her şeyle birlikte indirilir. Onu etkisiz hale getirmenin tek yolu rotate etmektir.

Nasıl düzeltilir

.git'i nginx'te engelle

Yolu /.git/ ile başlayan tüm istekleri reddet. Dizinin var olduğunu doğrulamamak için 403 yerine 404 döndür.

location ~ /\.git {
  deny all;
  return 404;
}
.git'i web root dışında tut

En güvenilir çözüm, .git dizinini en başından document root'a hiç deploy etmemektir. Build'ini, derlenmiş çıktının ayrı bir public/ dizinine gideceği şekilde yapılandır ve proje kökünü değil yalnızca bu dizini deploy et.

Engellendiğini doğrula

Düzeltmeyi deploy ettikten sonra tarayıcıda https://yourdomain.com/.git/config adresini iste. Git yapılandırmanın içeriğini değil, 404 döndürmelidir. AppSafe bunu her taramada yeniden kontrol eder.

Şimdiye kadar commit'lenmiş tüm secret'ları rotate et

Dizin erişilebilir durumdaysa, herhangi bir commit'te yer almış her API key'ini, parolayı ve token'ı ele geçirilmiş kabul et. Hepsini rotate et — commit'i kaldırmak yeterli değildir, çünkü object, saldırganın zaten indirmiş olabileceği pack dosyalarında hâlâ mevcuttur.

SSS

Yönetilen bir platforma (Vercel, Netlify, Fly.io) deploy ediyorum — risk altında mıyım?

Kaynaktan build alan yönetilen platformlar genellikle yalnızca build çıktısını deploy eder, bu yüzden .git dizini sunulmaz. Risk; VPS deployment'larında, proje kökünden build edilen Docker container'larında veya tüm çalışma ağacının kopyalandığı statik site export'larında daha yüksektir.

AppSafe tam olarak neyi kontrol ediyor?

AppSafe /.git/config ve /.git/HEAD adreslerini ister ve yanıt gövdesinin gerçek bir Git dosyasına benzeyip benzemediğini kontrol eder ([core] veya ref: kalıplarıyla eşleşme). Git içeriği olmayan genel bir 200 sayfası işaretlenmez.

Sunucudaki .git dizinini silebilir miyim?

Evet, uygulamanın çalışması için yalnızca deploy edilen dosyalara ihtiyacın varsa. Ancak deployment sürecinin bir sonraki push'ta onu geri kopyalamadığından emin ol. Web sunucusu seviyesinde engellemek, deployment script'lerinin tutarsız olduğu durumlar için ek bir güvence katmanıdır.

Uygulaman etkileniyor mu?

AppSafe, bunu ve onlarca başka sorunu tek bir ücretsiz taramada kontrol eder.

Uygulamamı ücretsiz tara