Yanlışlıkla bir API anahtarını veya şifreyi repoya commit edip push ettiniz. Ne yaparsınız?
Cevap
İlk ve en önemli adım: secret'ı hemen iptal edip yenisini oluşturmak (rotate). Push edildiği anda secret sızmış kabul edilir; GitHub'daki public repolar dakikalar içinde botlar tarafından taranır. Git geçmişini temizlemek ikinci adımdır ve tek başına yeterli değildir.
Adımlar
- Rotate: ilgili servisin panelinden anahtarı iptal et, yenisini oluştur, uygulamada (secret manager / ortam değişkeni) güncelle.
- Etki analizi: anahtar bu sürede kullanılmış mı? Servisin erişim loglarına ve faturaya bak. Gerekirse güvenlik ekibine bildir.
- Kodu düzelt: secret'ı koddan çıkar, ortam değişkeninden oku, ilgili dosyayı (
.env).gitignore'a ekle. - Geçmişi temizle (gerekirse):
git filter-repoveya BFG Repo-Cleaner ile secret'ı tüm geçmişten sil, ardından force push yap. - Ekibi bilgilendir: geçmiş yeniden yazıldığı için herkes depoyu yeniden klonlamalı veya dallarını yeni geçmişe taşımalı. GitHub'da önbellekteki commit görünümleri ve fork'lar için destek ekibine başvurmak gerekebilir.
# git-filter-repo ile belirli bir metni tüm geçmişte değiştir
echo 'sk_live_ABC123==>REMOVED' > replacements.txt
git filter-repo --replace-text replacements.txt
git push --force --all
# Bir dosyayı tüm geçmişten tamamen sil
git filter-repo --path config/secrets.json --invert-pathsSon commit henüz push edilmediyse iş çok daha kolaydır: git reset HEAD~1 veya git commit --amend ile düzeltilir; yine de dikkatli olmak için rotate etmek iyi bir alışkanlıktır.
Önleme
- Pre-commit hook'ta secret taraması: gitleaks, detect-secrets, trufflehog.
- GitHub secret scanning ve push protection özelliğini açmak (bilinen formatlardaki anahtarlar push anında engellenir).
.env.exampledosyası commit edilir, gerçek.envasla commit edilmez.
İlgili Git soruları
- git merge ile git rebase arasındaki fark nedir?
- git reset ile git revert arasındaki fark nedir?
- İyi bir code review nasıl yapılır? .gitignore'a neler eklenmelidir?
- Interactive rebase ile commit'leri nasıl düzenler ve squash edersiniz?
- git cherry-pick ve git stash ne işe yarar? Hangi durumlarda kullanılır?
- Merge conflict nedir ve nasıl çözülür?
Bu konuda başka bir soru biliyor musun?
Mülakatta karşılaştığın soruları ekle, onaylandıktan sonra yayına alınsın.