Tıp hukukunda ve hasta mahremiyetinde en ağır cezaları gerektiren suçlardan biri, hasta arşivinin sokağa saçılmasıdır. Düşünün ki bir psikiyatri kliniğinin veya tam teşekküllü bir hastanenin başhekimi, hastanenin son yirmi yılda tedavi ettiği on binlerce hastanın epikriz raporlarını, cinsel sağlık kayıtlarını, genetik tahlillerini ve hekimlerin el yazısıyla tuttuğu gizli hasta notlarını içeren tüm klasörleri alıyor; hastanenin caddeye bakan dış cephesindeki ilan panosuna asıyor! Sokaktan geçen herkes, meraklı komşular, magazinciler ve şantajcılar o panodan dosyaları tek tek alıp fotokopisini çekiyor. Başhekim ise içeride kapısını kilitlediğini düşünerek "Bizim hastanemiz çok güvenlidir, ana kapımız çeliktir" diye övünmektedir. Oysa hastanenin tüm mahremiyeti caddenin ortasında sergilenmektedir.
Yazılım geliştirme ve siber güvenlik dünyasında her gün binlerce şirketin, finans kuruluşunun ve e-ticaret sitesinin tüm varlığını korsanların eline teslim eden en vahim ihmal tam olarak bu pano skandalıdır: Gizli .git klasörünü internete açık public_html dizininde unutup tüm kaynak kodları ifşa etmek.
Bir Dağıtım (Deploy) Kazası: "Hepsini Sunucuya Atalım"
Geliştirici yerel bilgisayarında Git sürüm kontrol sistemiyle projeyi geliştirmiştir. Kodlar yazılmış, commit'ler atılmış, versiyonlar etiketlenmiştir.
Sıra projeyi canlı sunucuya aktarmaya gelir. Geliştirici ya terminalden sunucunun public_html klasörüne girip git clone komutunu çalıştırmıştır ya da yereldeki tüm proje klasörünü gizli dosyalarla birlikte ZIP yapıp sunucuda public_html içine açmıştır.
Web sitesi açılır: sirketadi.com.tr.
Geliştirici ana sayfayı inceler; her şey pırıl pırıldır. PHP kodları arka planda çalışmakta, veritabanı sorguları dönmekte, kullanıcı şifreleri ekrana yansımamaktadır. Geliştirici arkasına yaslanır: "Kusursuz bir güvenlik! Kodlarımız sunucuda güvende."
Fakat geliştiricinin unuttuğu devasa bir kör nokta vardır: Proje klasörünün en tepesindeki o gizli klasör: .git.
İnternete Açık Arşiv: site.com/.git/
Git bir büyücü değildir; projenin tüm geçmişini, yazılmış her satır kodu, silinmiş eski şifreleri ve commit loglarını yerel bir veritabanı olarak .git/ klasörünün içinde saklar:
.git/HEAD.git/config.git/index.git/objects/
Eğer siz bu klasörü web sunucunuzun kök dizinine koyar ve Apache/Nginx yapılandırmanızda bu klasöre erişimi açıkça yasaklamazsanız; internetteki herhangi bir kişi tarayıcısının adres çubuğuna şunu yazabilir:
https://sirketadi.com.tr/.git/HEADVe tarayıcı ekrana şu masum satırı basar:
ref: refs/heads/mainBu satırın ekranda belirmesi, siber korsanlar için "Bu kalenin tüm gizli tünelleri ve hazine odasının anahtarı kapının üzerinde unutulmuştur" demektir!
30 Saniyede Gelen Felaket: git-dumper Saldırısı
Korsanların interneti tarayan otomatik botları bu açık .git klasörünü tespit ettiği an saniyeler içinde özel açık kaynak araçlar (Örn: git-dumper veya GitTools) devreye girer.
Saldırgan kendi terminalinden tek bir komut çalıştırır:
git-dumper https://sirketadi.com.tr/.git/ /root/calinan_proje/Bu araç ne yapar?
.git/indexdosyasını indirir; projedeki tüm dosyaların isimlerini ve dizin ağacını okur..git/objects/dizinindeki tüm hash'lenmiş nesneleri peş peşe HTTP GET istekleriyle çeker.- Çekilen bu nesneleri yerel makinede
git checkout -file açar.
Ve tam 30 saniye içinde, sitenizin sunucusunda derlenmiş olarak çalışan tüm PHP kaynak kodları, JavaScript dosyaları, veritabanı mimarisi ve en önemlisi .env dosyasındaki tüm sırlar korsanın bilgisayarında satır satır yeniden canlanır!
Korsan artık sitenize uzaktan bakmamaktadır; sitenizin kaynak kodunu kendi yerel Visual Studio Code editöründe açmış, kahvesini yudumlayarak incelemektedir!
İtiraf Sayfası: "Geçmiş Commit'lerde Unutulan Şifreler"
Yazılımcı belki de canlıya çıkmadan önce .env dosyasını temizlemiş veya şifreleri değiştirmiştir. Fakat Git'in hafızası asla unutmaz!
Korsan terminalden şu komutu yazar:
git log -pVe üç ay önceki bir commit'te geliştiricinin yazdığı şu mesaj ve kod karşısına çıkar:
commit 8492a1b948c2...
Author: Ahmet <[email protected]>
Date: Wed Dec 10 2025
fix: test veritabanı şifresi kaldırıldı canlıya geçildi
- $db_pass = "SirketKritikParola2026!";
+ $db_pass = env('DB_PASSWORD');Yazılımcının "sildim" sandığı o veritabanı kök parolası, AWS S3 erişim anahtarları, Stripe ve İyzico gizli API token'ları Git tarihçesinde tüm çıplaklığıyla parıldamaktadır!
Ertesi sabah şirket veritabanı fidye yazılımcıları tarafından boşaltılır, müşteri kredi kartları dark web'e saçılır ve şirketin kapısına KVKK ve siber suçlar müfettişleri dayanır.
Cerrahi Güvenlik: .git Klasörünü Mühürleme Protokolü
Kaynak kodlarınızın sokağa saçılmasını engellemek, tıp dilindeki "hasta dosyasını çelik kasaya kilitlemek" kadar basit ve vazgeçilmez bir reflekstir:
- Web Sunucusu Seviyesinde Tam Blokaj (Nginx):
Tüm Nginx sunucu bloklarınıza (nginx.conf) şu kuralı ekleyin; adı nokta ile başlayan tüm gizli dosya ve klasörlere erişimi kökünden yasaklayın:# Gizli dosyalara (.git, .env, .htaccess) erişimi anında kes! location ~ /\. { deny all; access_log off; log_not_found off; return 404; } - Apache
.htaccessile Kapıyı Kilitlemek:# .git dizinine doğrudan erişimi engelle RedirectMatch 404 /\.git - Web Kök Dizini Ayrımı (En Temiz Mimari):
Modern framework'lerde (Laravel, Symfony, Django, Rails) proje kök dizini ile web kök dizini birbirinden ayrıdır. Git reposunu/home/user/proje/dizinine kurun; web sunucusunun Document Root'unu ise sadece/home/user/proje/public/olarak ayarlayın. Böylece.gitklasörü webden erişilebilir alanın tamamen dışında kalır; isteseniz bile internetten açılamaz! - Dağıtım (Deploy) Sırasında
.gitDizinini Temizlemek:
Eğer geleneksel bir rsync veya deploy betiği kullanıyorsanız, sunucuya aktarırken.gitdizinini hariç tutun:rsync -avz --exclude='.git' --exclude='.env.example' ./ user@sunucu:/var/www/html/
Hasta dosyasını sokak panosuna asan hekime nasıl güvenilemezse; .git klasörünü public_html içine bırakıp internete açık sergileyen geliştiriciye de mühendis denilemez. Kaynak kodlarınız şirketinizin entelektüel sermayesi ve dijital kalesidir; o kalenin arka kapısını ardına kadar açık bırakırsanız, faturayı sadece kendinize değil, size güvenen binlerce müşterinize de ödetirsiniz.