Siber Güvenlik İpuçları ve Defansif Kodlama

Yazılım geliştirmek sadece çalışan kod yazmak değil, aynı zamanda saldırılara karşı dirençli sistemler inşa etmektir. Bu rehberde, bir web uygulamasının güvenliğini artıracak ileri seviye ipuçlarını inceleyeceğiz.

Sıfır Güven (Zero Trust) Modeli

Sistemin içindeki veya dışındaki hiçbir kullanıcıya/isteğe varsayılan olarak güvenmeyin. Her istek doğrulanmalı ve yetkilendirilmelidir.

1) Şifreleme ve Veri Güvenliği

Kullanıcı verilerini saklarken asla geri döndürülebilir şifreleme kullanmayın. Modern standartları tercih edin:

  • Password Hashing: PHP'de password_hash() fonksiyonunu PASSWORD_ARGON2ID algoritması ile kullanın.
  • Salt Kullanımı: Her kullanıcı için benzersiz bir salt (tuzlama) değeri otomatik olarak oluşturulmalıdır.

2) Brute Force (Kaba Kuvvet) Koruması

Saldırganların binlerce şifre denemesini engellemek için şu yöntemleri uygulayın:

Yöntem Açıklama
Rate Limiting Aynı IP adresinden gelen istek sayısını sınırlandırın (Örn: 1 dakikada max 5 login denemesi).
Captcha Şüpheli durumlarda Google reCAPTCHA v3 gibi bot koruma sistemlerini devreye sokun.
Account Lockout Üst üste hatalı girişlerde hesabı geçici olarak (örn: 15 dk) kilitleyin.

3) API Güvenliği ve JWT (JSON Web Token)

Mobil uygulamalar veya modern frontend yapıları için API güvenliği hayati önem taşır:

  • Token'ları asla localStorage içinde saklamayın (XSS riski). HttpOnly Cookie kullanın.
  • Token süresini (Expiration) kısa tutun ve Refresh Token yapısını kurgulayın.
  • Her API isteğinde Rate Limit uygulandığından emin olun.

4) Kod Örneği: Güvenli Şifreleme (PHP)

Secure Password Hashing & Verify
// Şifreyi Güvenli Şekilde Kaydetme
$hashedPassword = password_hash($userPassword, PASSWORD_ARGON2ID);

// Giriş İşleminde Doğrulama
if (password_verify($submittedPassword, $hashedPassword)) {
    // Giriş Başarılı
} else {
    // Hatalı Şifre
}

5) Sunucu ve Ortam Güvenliği

  • .env Dosyaları: API anahtarlarınızı ve DB şifrelerinizi asla kodun içine yazmayın. .env dosyası kullanın ve bu dosyayı .gitignore ile hariç tutun.
  • Directory Listing: Sunucunuzda klasör listeleme özelliğini kapatın (Apache için Options -Indexes).
  • Gereksiz Servisler: Sunucuda kullanmadığınız portları (FTP, Telnet vb.) kapatın.
💡 Unutmayın: En büyük güvenlik açığı insandır. Kullanıcılarınıza iki faktörlü doğrulamayı (2FA) zorunlu tutmak veya teşvik etmek, güvenliği %90 oranında artırır.