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

Zafiyetli
// committed to the repository and shipped in the bundle
const stripe = new Stripe("sk_live_…");
const DB_PASSWORD = "Tr0ub4dor&3";
Güvenli
// 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

Güncellendi 2026-10-11