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
localStorageiç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 Limituygulandığından emin olun.
4) Kod Örneği: Güvenli Şifreleme (PHP)
// Ş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.
.envdosyası kullanın ve bu dosyayı.gitignoreile 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.