Yazılım Güvenliği Temelleri

Kimlik doğrulama, yetkilendirme, girdi doğrulama, hash, şifreleme ve least privilege kavramlarını tehdit modeliyle öğrenin.

Bir kullanıcının adres çubuğuna başka sipariş numarası yazarak başkasının siparişini görebildiğini düşünün. Kullanıcı oturum açmış olabilir; fakat o kaynağa yetkili değildir. Güvenlik tek bir login ekranı değil, her sınırda doğrulanan kurallar bütünüdür.

Önce tehdit modeli

Asset korunacak veri veya yetenektir. Threat actor zarar verebilecek taraftır. Attack surface sisteme girilebilen bütün noktalardır. Threat model, neyi kimden ve hangi olası yollarla koruduğumuzu açıklar. Risk, olasılık ile etkinin birlikte değerlendirilmesidir.

Authentication ve authorization

Authentication “kimsin?”, authorization “bunu yapabilir misin?” sorusunu yanıtlar. Her istekte nesne seviyesinde yetki kontrolü gerekir:

const order = await orders.findById(orderId);
if (!order || order.customerId !== session.userId) {
  throw new NotFoundError();
}

findById kaynağı bulur. İkinci koşul sahipliği kontrol eder. Yetkisiz kullanıcıya kaynağın varlığını sızdırmamak için bazı sistemler 403 yerine 404 döndürür. Yönetici gibi farklı roller varsa politika merkezi ve test edilebilir olmalıdır.

Girdi ve sorgular

Kullanıcı girdisine güvenilmez. SQL sorgusunda metin birleştirmek injection riski doğurur; parameterized query kullanılır. HTML çıktısı bağlama uygun encode edilmelidir. Doğrulama uzunluk, biçim, izin verilen değer ve iş kuralını kapsar.

Hash ve şifreleme aynı şey değildir

Şifreleme doğru anahtarla geri çözülebilir; gizli veriyi korur. Kriptografik hash, girdiden sabit boyutlu ve pratikte geri çevrilemeyen özet üretir. Salt, her parola için rastgele üretilip hash’e katılan açık değerdir; aynı parolaların aynı özeti üretmesini ve hazır hash tablolarıyla aranmasını engeller. Argon2id, scrypt ve bcrypt, deneme saldırısını pahalılaştırmak için bilerek yavaş çalışan parola türetme algoritmalarıdır. API anahtarları kaynak koda yazılmaz; gizli değerleri erişim kontrollü saklayan secret yönetiminde tutulur ve düzenli olarak yenilenir.

Savunma ilkeleri

Least privilege her bileşene yalnızca gereken yetkiyi verir. Defense in depth tek kontrol kırıldığında diğer katmanların korumasını sürdürür. Secure by default, güvenli seçeneği varsayılan yapar. Günlüklerde parola, token ve kişisel veri tutulmaz.

Kontrol listesi

  • Her endpoint için kimlik ve nesne yetkisini ayrı kontrol edin.
  • Sorguları parametreli çalıştırın.
  • Bağımlılık ve secret taramalarını otomatikleştirin.
  • Hata mesajında iç sistem ayrıntısı sızdırmayın.
  • Rate limit, audit log ve güvenli varsayılanlar kullanın.
  • Yedeklerin geri yüklenebildiğini test edin.