Koda gömülü secret'lar: kodda, commit'lerde ve paketlerde API anahtarları
Kaynak koddaki bir anahtarı kodu okuyabilen herkes okuyabilir — herkese açık bir repo veya bir web sitesi paketi için bu herkes demektir. Otomatik tarayıcılar yeni anahtarları bir push'tan dakikalar sonra bulur.
Örnek
// committed to the repository and shipped in the bundle
const stripe = new Stripe("sk_live_…");
const DB_PASSWORD = "Tr0ub4dor&3";// read from the environment on the server; rotate anything that was committed
const stripe = new Stripe(process.env.STRIPE_SECRET_KEY);
const DB_PASSWORD = process.env.DB_PASSWORD;
// the browser only ever sees publishable keys (pk_live_…)Nasıl oluşur
Bir şeyi yerelde çalıştırmak için bir anahtar yapıştırılır, bir .env dosyası yanlışlıkla commit edilir veya sunucu tarafı bir secret front-end kodundan referans alınıp JavaScript paketine düşer. Satırı sonradan silmek işe yaramaz: değer git geçmişinde, her klonda ve önbellekte kalır.
Nasıl düzeltilir
Commit edilmiş her secret'ı sızmış say.
- Önce sağlayıcının panelinden anahtarı iptal et ve yenile
- Secret'ları sunucuda ortam değişkeninden veya bir secret yöneticisinden oku
- Front-end kodunda yalnızca yayımlanabilir anahtarlar tut (Stripe pk_…, kısıtlı tarayıcı anahtarları)
- .env'i .gitignore'a ekle ve push etmeden önce tara
RepoVerse bunu nasıl bulur
- YüksekKimlik bilgisi düz metin olarak atanmış
Bir parola, secret, token veya API anahtarı yapılandırmadan okunmak yerine doğrudan string olarak atanmış.
örüntü
- KritikKaynak kodda AWS erişim anahtarı
Koda gömülü bir `AKIA…` erişim anahtarı var.
örüntü
- KritikKaynak kodda GitHub token'ı
Koda gömülü bir GitHub token'ı var.
örüntü
- KritikKaynak kodda canlı Stripe gizli anahtarı
Koda gömülü bir `sk_live_…` anahtarı var.
örüntü
- KritikKaynak kodda OpenAI veya Anthropic API anahtarı
Koda gömülü bir model sağlayıcı anahtarı var.
örüntü · CWE-798
- KritikRepoya özel anahtar eklenmiş
Kaynak kodda bir PEM özel anahtar bloğu var.
örüntü
- YüksekKimlik bilgisine atanmış uzun ve rastgele görünen değer
Değişken adı kimlik bilgisi diyor ve değer yoğun, rastgele — yer tutucudan çok gerçek bir anahtarın şeklinde.
örüntü · CWE-798
- KritikOrtam dosyası repoya eklenmiş
Gerçek değerler taşıyan bir `.env` repoda; içindeki her secret klonlayabilen herkes tarafından okunabilir ve silindikten sonra geçmişte okunmaya devam eder.
örüntü · CWE-538
- KritikGizli anahtar herkese açık bir sayfada veya script'te görünüyor
Sayfa kaynağını açan herkes anahtara sahip olur ve onu hesabının yetkileriyle kullanabilir — bunlar otomatik olarak taranıyor.
web sitesi · CWE-798
Sorular
- RepoVerse hangi secret formatlarını tanıyor?
- AWS, GitHub, Stripe, Slack, OpenAI, Anthropic, SendGrid ve Google servis hesapları için sağlayıcı formatları, PEM özel anahtarları, parolalı bağlantı string'leri ve secret adlı değişkenlere atanmış yüksek entropili değerler. Placeholder'lar ve test fixture'ları dışarıda bırakılır.
- Canlı bir web sitesinde secret bulabilir mi?
- Evet. Web sitesi incelemesi sayfa HTML'ini, sitenin kendi script'lerini ve yayımlanmış source map'leri sağlayıcı formatındaki secret anahtarlar için tarar ve bulduklarının yalnızca ilk karakterlerini gösterir.
İlgili
- Kod, secret ve bağımlılıklar için GitHub güvenlik taramasıGitHub reposunu injection açıkları, sızmış secret'lar ve zafiyetli bağımlılıklar için tara. İstekten tehlikeli çağrıya veri akışı izi ve çözüm önerileri.
- Kanıtını gösteren web sitesi güvenlik taramasıPasif web sitesi güvenlik taraması: HTTPS ve HSTS, CSP, cookie'ler, karışık içerik, açıkta kalan anahtarlar ve eski JavaScript kütüphaneleri — kanıtıyla birlikte.
- Zafiyetli bağımlılıklar: senin yazmadığın kodUygulama kodunun çoğu üçüncü taraftır. Zafiyetli bağımlılıkların projeye nasıl girdiği (CWE-1395), neden önemli olanın lockfile olduğu ve düzelten yükseltmeyi nasıl seçersin.
Güncellendi 2026-10-11