Güvenlik, yazılıma en sonda eklenen bir kilit değildir; kodun DNA'sına baştan işlenmesi gereken bir alışkanlıktır. "Önce çalışsın, güvenliği sonra düşünürüz" yaklaşımı, en pahalı hataların kaynağıdır; çünkü bir açık canlıya çıktıktan sonra keşfedildiğinde, sonuçları veri sızıntısından itibar kaybına kadar uzanır. İyi haber şu: en yaygın güvenlik açıklarının büyük çoğunluğu bilinen, belgelenmiş ve önlenebilir açıklardır. OWASP topluluğu bu açıkları düzenli olarak derler. Bu yazıda en sık karşılaşılan açıkları ve her biri için somut korunma yöntemlerini ele alıyoruz.

Temel İlke: Kullanıcıya Asla Güvenme
Güvenli kodlamanın altın kuralı tek cümlede özetlenir: dışarıdan gelen hiçbir veriye güvenme. Kullanıcıdan gelen her form girdisi, her URL parametresi, her başlık; kötü niyetli olabilir. Güvenli kod, bu verinin masum olduğunu varsaymaz; her zaman doğrular, temizler ve sınırlar. Bu tek prensip, yaygın açıkların çoğunu baştan kapatır.
Güvenlik bir özellik değil, bir zihniyettir. Her satırı yazarken "bu veriyi bir saldırgan gönderseydi ne yapardı?" diye sormak, en güçlü savunmadır.
SQL Enjeksiyonu (SQL Injection)
En eski ama hâlâ en yaygın açıklardan biridir. Kullanıcı girdisi doğrudan bir SQL sorgusuna eklendiğinde, saldırgan sorgunun mantığını değiştirebilir; veritabanını okuyabilir, silebilir, hatta ele geçirebilir.
// TEHLIKELI: girdi dogrudan sorguya ekleniyor
$sorgu = "SELECT * FROM kullanicilar WHERE email = '" . $_POST['email'] . "'";
// GUVENLI: parametreli sorgu (prepared statement)
$stmt = $pdo->prepare('SELECT * FROM kullanicilar WHERE email = ?');
$stmt->execute([$_POST['email']]);
Çözüm nettir: her zaman parametreli sorgular (prepared statements) kullanın. Bu yöntemde veri ile komut birbirinden ayrılır; kullanıcı ne gönderirse göndersin, o sadece veri olarak işlenir, asla komut olarak çalışmaz.
Siteler Arası Betik Çalıştırma (XSS)
XSS (Cross-Site Scripting), saldırganın bir web sayfasına zararlı JavaScript enjekte etmesidir. Örneğin bir yorum alanına script kodu yazan saldırgan, o yorumu gören her kullanıcının tarayıcısında kod çalıştırabilir; oturum çerezlerini çalabilir.
Korunmanın temeli çıktı kaçırmadır (output escaping): kullanıcıdan gelen veriyi ekrana basmadan önce HTML özel karakterlerini zararsız hale getirmek.
// TEHLIKELI: veri dogrudan ekrana basiliyor
echo "<p>" . $_GET['isim'] . "</p>";
// GUVENLI: HTML kacirma uygulaniyor
echo "<p>" . htmlspecialchars($_GET['isim'], ENT_QUOTES, 'UTF-8') . "</p>";

Siteler Arası İstek Sahtekârlığı (CSRF)
CSRF (Cross-Site Request Forgery), giriş yapmış bir kullanıcıya, farkında olmadan istenmeyen bir işlem yaptırmaktır. Saldırgan, kullanıcının oturumunu kullanarak örneğin şifre değiştirme isteği gönderebilir. Korunma yöntemi, her form için tahmin edilemez bir gizli belirteç (CSRF token) üretmek ve gelen istekte bunu doğrulamaktır.
- Her oturum/form için rastgele bir belirteç üretin.
- Belirteci hem oturumda saklayın hem de forma gizli alan olarak koyun.
- İstek geldiğinde iki değeri karşılaştırın; eşleşmiyorsa reddedin.
Kimlik Doğrulama ve Oturum Zafiyetleri
Zayıf parola politikaları, güvensiz oturum yönetimi ve kırık kimlik doğrulama, en ciddi risklerdendir. Birkaç temel önlem:
- Parolaları asla düz metin saklamayın: Güçlü bir algoritma ile karma (hash) yapın.
- Oturum kimliklerini güvenli üretin: Girişten sonra oturum kimliğini yenileyin.
- Çok faktörlü kimlik doğrulama (MFA): Kritik hesaplar için ek bir koruma katmanı sunun.
- Deneme sınırlaması: Kaba kuvvet (brute force) saldırılarına karşı başarısız girişleri sınırlayın.
// Parola karma ve dogrulama
$hash = password_hash($parola, PASSWORD_DEFAULT);
// ...
if (password_verify($girilenParola, $hash)) {
session_regenerate_id(true); // Oturum sabitleme saldirisina karsi
// giris basarili
}
Diğer Kritik Konular
- Güvenlik yanlış yapılandırması: Varsayılan şifreler, açık hata mesajları, gereksiz açık portlar. Üretim ortamında hata ayrıntılarını asla kullanıcıya göstermeyin.
- Güvensiz bağımlılıklar: Kullandığınız kütüphaneler açık barındırabilir. Bağımlılıkları düzenli güncelleyin ve bilinen açıklara karşı tarayın.
- Yetkisiz erişim: Her istekte kullanıcının o işleme yetkisi olup olmadığını sunucu tarafında doğrulayın; istemciye asla güvenmeyin.
- Hassas veri sızıntısı: Hassas veriyi hem iletimde (HTTPS) hem de depolamada şifreleyin.
Berasoft olarak geliştirdiğimiz her yazılımda güvenliği bir sonraki adım değil, ilk adım olarak ele alırız; parametreli sorgular, çıktı kaçırma, CSRF koruması ve güvenli kimlik doğrulama, kodun standart bir parçasıdır. Uygulamanızın güvenlik durumunu değerlendirmek isterseniz bizimle iletişime geçebilirsiniz.
Sonuç
Güvenli kod yazmak, ezoterik bir uzmanlık değil, disiplinli bir alışkanlıktır. En yaygın açıkların neredeyse tamamı, tek bir prensiple önlenebilir: dışarıdan gelen veriye asla güvenme. Parametreli sorgular SQL enjeksiyonunu, çıktı kaçırma XSS'i, belirteçler CSRF'i, güçlü kimlik doğrulama ise hesap ele geçirmeyi engeller. Bu önlemler kodun sonuna eklenen yamalar değil, baştan yazılan alışkanlıklar olmalıdır. Güvenlik bir varış noktası değil, sürekli bir dikkat halidir; ama temel prensipleri kodunuzun DNA'sına işlediğinizde, en yaygın tehditlerin büyük çoğunluğuna karşı zaten korunmuş olursunuz.
Bir sonraki projeniz için hazır mısınız?
Okuduklarınızı işinize uygulamak veya dijital dönüşümünüzü konuşmak isterseniz, ekibimiz bir mesaj uzağınızda.

Yorum Yap