Mehmet

WFN Üye
Konular
1,851
Mesajlar
1,852
Çözüm
0
Ticaret Puanı
0
Üyelik
1 Ay 6 Gün
Konum
YurtDışı
Web Sitesi
Var
Alanı
Google Adsense
1/1
Konu sahibi
Uygulama sırları; parola, API anahtarı, erişim belirteci, özel sertifika anahtarı ve veritabanı bağlantı parolası gibi çalışma sırasında gizli kalması gereken değerlerdir. Bunları kaynak koduna yazmak yerine uygulamanın dışından, ortam değişkenlerinden veya bir sır yönetim sisteminden okutun. Kaynak kodunda yalnız değişken adı, gerekli ayar ve örnek şablon bulunsun; gerçek değer dağıtım ortamında sağlansın.

Kaynak kodu ile sır arasındaki fark​


Kaynak kodu uygulamanın nasıl çalıştığını açıklar ve sürüm kontrolünde tutulabilir. Sır ise uygulamanın hangi hesaba veya hizmete erişebileceğini belirler. Kaynak kodu herkese açık olsa bile sırların açığa çıkmaması hedeflenir. Ancak kaynak koduna hiç sır koymamak tek başına yeterli değildir; günlükler, hata mesajları, yedekler, CI/CD değişkenleri ve istemciye gönderilen JavaScript dosyaları da kontrol edilmelidir.

Örneğin uygulama bir ödeme hizmetine bağlanıyorsa kaynak kodunda PAYMENT_API_KEY adının kullanılması normaldir. Gizli sunucu anahtarı olan sk_live_... gibi gerçek bir değer kaynak koduna, HTML'ye, tarayıcı JavaScript'ine ya da Git deposuna girmemelidir. Bazı hizmetlerin özellikle yayımlanabilir olarak tanımladığı anahtarlar istemciye verilebilir; bütün API anahtarları gizli değildir. Sağlayıcının anahtar türünü ve yetkilerini esas alın. Tarayıcıda kullanılması zorunlu olan değerler de gerçekten gizli kabul edilmemelidir; istemciye gönderilen her değer kullanıcı tarafından görülebilir.

Hangi değer nerede tutulmalı?​


Aşağıdaki ayrım, yerleşimi seçmek için pratik bir başlangıçtır.

DeğerKaynak koduÇalışma ortamıNot
Değişken adı ve varsayılan olmayan ayarEvetGerekmezÖrneğin DATABASE_URL adı
Yerel geliştirme sırrıHayırYerel ortam değişkeni veya göz ardı edilen dosyaEkip içinde güvenli yöntemle paylaşılmalı
Test sırrıHayırCI/CD gizli değişkeniÜretim sırrından ayrı olmalı
Üretim sırrıHayırSır yöneticisi veya platformun gizli ayarlarıYetki ve erişim günlükleri ayrıca yönetilmeli

Kaynak koduna .env.example gibi yalnızca isimleri ve biçimi gösteren bir şablon eklenebilir. Gerçek .env dosyası ise sürüm kontrolü dışında tutulmalıdır. Bunun için depodaki göz ardı dosyasına şu tür bir kayıt eklenir:

Kod:
.env
.env.*
!.env.example

Git dışına çıkarmak dosyayı web erişiminden korumaz. Gerçek sır dosyalarını web kökü dışında ve sınırlı dosya izinleriyle tutun; istemci derlemesine aktarmayın. .env dosyasının bulunması tek başına yüklenmesini de sağlamaz; kullandığınız çalışma ortamının açık yükleme ayarını yapın.

Bu kural tek başına geçmişte kaydedilmiş sırları temizlemez. Bir sır daha önce Git geçmişine girdiyse dosyadan silmek yeterli değildir; sır hemen iptal edilmeli veya yenilenmeli, ardından geçmiş ve dağıtım günlükleri ayrıca incelenmelidir.

Uygulanabilir en küçük örnek​


Aşağıdaki Node.js örneğinde uygulama, APP_API_KEY değişkenini işletim sisteminden okur. Kodda gerçek anahtar bulunmaz.

Kod:
// app.cjs
const http = require('node:http');

const apiKey = process.env.APP_API_KEY;
if (!apiKey) {
  console.error('APP_API_KEY tanımlı değil; uygulama başlatılmadı.');
  process.exit(1);
}

http.createServer((req, res) => {
  if (req.url === '/health') {
    res.writeHead(200, {'content-type': 'text/plain; charset=utf-8'});
    res.end('ok');
    return;
  }

  res.writeHead(404);
  res.end();
}).listen(3000, '127.0.0.1', () => {
  console.log('Uygulama 3000 portunda çalışıyor.');
});

POSIX kabuğunda yerel deneme:

  1. Dosyayı app.cjs adıyla kaydedin.
  2. Gerçek sır içermeyen örnek değeri verin: APP_API_KEY='yerel-test-degeri' node app.cjs
  3. Başka bir terminalde http://127.0.0.1:3000/health isteği gönderin veya bir HTTP istemcisiyle /health yolunu çağırın.

Bu örnek yalnızca değişkenin boş olup olmadığını denetler ve localhost üzerinde sağlık yanıtı üretir; anahtarı bir sağlayıcıya göndermez ve geçerliliğini doğrulamaz. Başarılı durumda konsolda uygulamanın çalıştığını belirten mesaj, sağlık isteğinde ise ok yanıtı görülür. “APP_API_KEY tanımlı değil” hatası, kodun bozuk olduğunu değil, gerekli sırrın çalışma ortamına verilmediğini gösterir. Üretimde komut satırına yazmak yerine platformun gizli değişken alanı veya sır yöneticisi kullanılmalıdır; komut geçmişi ve bazı işlem gözlem araçları değişken değerlerini açığa çıkarabilir.

Dağıtımda izlenecek kararlar​


  1. Kod incelemesinde parola, belirteç, özel anahtar ve bağlantı dizesi arayın; gerçek değer yerine ortam değişkeni adını bırakın.
  2. Yerel, test ve üretim için ayrı sırlar tanımlayın. Aynı anahtarı ortamlarda yeniden kullanmayın.
  3. Uygulama açılırken zorunlu sırları doğrulayın; eksikse güvenli olmayan varsayılanla devam etmek yerine başlatmayı durdurun.
  4. Sırları yalnız sunucu tarafında okuyun. HTML, istemci JavaScript'i, kaynak haritası ve hata yanıtlarına aktarmayın.
  5. Sürüm kontrolü, CI/CD çıktıları, uygulama günlükleri ve yedeklerde sır sızıntısı olup olmadığını kontrol edin.
  6. Bir sır sızdıysa önce iptal edip yenisini üretin; ardından sızıntı kaynağını giderin. Olay ve erişim kayıtlarını koruyarak erişimi sınırlayın; sır içeren alanları bütünlüğü ve saklama kurallarını koruyan kontrollü bir süreçle maskeleyin. Sadece dosyayı silmek geçerli sırrı etkisiz hale getirmez.

Sık yapılan hatalar​


En yaygın hata, .gitignore eklemenin daha önce commit edilmiş bir sırrı koruduğunu sanmaktır. Göz ardı kuralı yalnız izlenmeyen dosyaları etkiler. İkinci hata, sırları şifreleyip anahtarını da aynı depoda tutmaktır; bu gerçek bir ayrım sağlamaz. Üçüncü hata ise üretim sırrını uygulamanın hata mesajına, debug çıktısına veya istemci tarafı yapılandırmasına yazdırmaktır.

Ortam değişkenleri kaynak kodundan ayrım sağlar ancak erişim denetimi, rotasyon ve kayıt maskeleme işlerini kendiliğinden çözmez. Birden fazla servis veya ekip söz konusuysa erişimi rol bazında sınırlayan bir sır yöneticisi kullanmak ve yalnız gereken servise gereken sırrı vermek daha doğru yaklaşımdır.

Kaynaklar​



Sık sorulan sorular​


Sırrı silip yeni commit yapmak yeterli midir?​

Hayır. Sır Git geçmişinde, önbelleklerde veya yedeklerde kalabilir. Önce ilgili erişimi iptal edin ya da anahtarı yenileyin; sonra geçmiş kopyalarını ve sızıntı noktalarını inceleyin.

Ortam değişkeni değeri tamamen güvenli midir?​

Hayır. Sunucudaki yetkili kullanıcılar, hatalı günlükleme veya işlem gözlem araçları değeri görebilir. Bu nedenle erişim yetkisi, günlük maskeleme ve sır rotasyonu ayrıca uygulanmalıdır.

İstemci tarafı API anahtarı sır olarak saklanabilir mi?​

İstemciye gönderilen bir değer kullanıcı tarafından görülebilir; bu nedenle gizli kabul edilmemelidir. Böyle bir anahtar gerekiyorsa yetkisini sınırlayın veya isteği sunucu üzerinden geçirerek gerçek sırrı sunucuda tutun.
 

Sende şimdi bize katılmak ister misin?

Kayıt ol

Bize katılım kolay ve ücretsizdir!

Konuyu görüntüleyenler

Bu konuyu şu anda görüntüleyen üye bulunmuyor.