Web Sitelerini Tehdit Eden 3 Büyük Güvenlik Açığı: SQL Injection, XSS ve CSRF Nedir? Nasıl Korunulur?
İnternete açılan her web sitesi saniyeler içinde otomatik saldırı botlarının hedefi olur. Web dünyasının en yaygın ve tehlikeli 3 açığı olan SQL Injection, Cross-Site Scripting (XSS) ve CSRF saldırılarının anatomisini ve kod seviyesinde savunma yöntemlerini inceliyoruz.
Bir web sitesini veya backend API servisini canlı sunucuya almak heyecan verici bir andır. Ancak siteniz internete açıldığı ilk saniyeden itibaren dünya genelindeki binlerce otomatik bot, güvenlik tarayıcısı ve kötü niyetli saldırgan tarafından taranmaya başlar. OWASP (Open Web Application Security Project) raporlarına göre web uygulamalarındaki en yıkıcı güvenlik açıklarının büyük bir kısmı çok temel kodlama hatalarından kaynaklanmaktadır. Bu yazıda web dünyasının en tehlikeli 3 açığını ve bunlardan nasıl korunacağımızı inceliyoruz:
1. SQL Injection (SQLi) - Veritabanının Anahtarlarını Saldırgana Teslim Etmek
SQL Injection; kullanıcının web formlarına (giriş kutusu, arama çubuğu) girdiği verilerin filtrelenmeden doğrudan SQL sorgusuna metin olarak yapıştırılması sonucu ortaya çıkan ölümcül bir açıktır.
Nasıl Çalışır?
Kullanıcı girişini şöyle kontrol ettiğinizi varsayalım:
SELECT * FROM users WHERE username = '$username' AND password = '$password'
Eğer saldırgan kullanıcı adı kutusuna ' OR '1'='1 yazarsa sorgu şu hale gelir:
SELECT * FROM users WHERE username = '' OR '1'='1' AND password = ''
'1'='1' şartı her zaman doğru kabul edildiği için saldırgan şifreyi bilmeden ilk kullanıcının (genellikle yönetici) hesabıyla sisteme giriş yapar!
Nasıl Korunulur?
Kullanıcıdan gelen girdiyi ASLA doğrudan SQL sorgusunun içine string birleştirme ile koymayın! Bunun yerine PDO veya 'Prepared Statements' (Parametrik Sorgular) kullanın. Parametrik sorgularda veritabanı motoru gelen girdiyi çalıştırılabilir bir kod olarak değil, salt masum bir veri olarak işler ve açık kökten kapanır.
2. XSS (Cross-Site Scripting) - Ziyaretçilerin Tarayıcısında Zararlı Kod Çalıştırmak
XSS açığı; kullanıcıların girdiği verilerin (örneğin blog yorumları veya profil isimleri) temizlenmeden ve HTML filtrelerinden geçirilmeden diğer ziyaretçilere sunulması durumunda ortaya çıkar.
Nasıl Çalışır?
Bir yorum kutusuna kötü niyetli bir kullanıcının zararlı JavaScript kodu yazdığını düşünün. Eğer siz bu yorumu sayfada doğrudan ekrana basarsanız, o yorumu okuyan tüm ziyaretçilerin tarayıcısında bu script çalışır; oturum çerezleri (session cookies) çalınabilir veya sahte giriş ekranları gösterilerek şifreleri ele geçirilebilir.
Nasıl Korunulur?
Ekrana metin basarken mutlaka HTML kaçış fonksiyonları kullanın. PHP'de htmlspecialchars(), Python web çatılarında ise yerleşik şablon filtreleri (Jinja2 escaping) kullanmak JavaScript kodlarının tarayıcı tarafından çalıştırılmasını engeller, salt metin olarak gösterilmesini sağlar.
3. CSRF (Cross-Site Request Forgery) - Kullanıcı Adına Gizlice İstek Göndermek
CSRF açığında saldırgan; kurbanın oturum açmış olduğu güvenilir bir sitede, onun yetkilerini kullanarak habersizce arka planda işlem yapmasını sağlar.
Nasıl Çalışır?
Kullanıcı bir bankacılık veya e-ticaret sitesinde oturum açmış durumdayken harici zararlı bir web sitesini ziyaret eder. Bu zararlı sayfada arka planda gizlice şu istek tetiklenir:
<img src='https://banka.com/para-gonder?alici=hacker&miktar=1000'>
Tarayıcı otomatik olarak kullanıcının bankadaki oturum çerezlerini bu isteğe iliştirir ve banka isteğin gerçekten kullanıcıdan geldiğini sanarak transferi tamamlar!
Nasıl Korunulur?
Her form ve durum değiştiren (POST, PUT, DELETE) işlem için oturuma özel benzersiz bir 'CSRF Token' üretin ve istek geldiğinde bu token'ı mutlaka sunucuda doğrulayın. Ayrıca çerezlerde 'SameSite=Strict' veya 'SameSite=Lax' niteliğini kullanarak çerezlerin harici sitelerden taşınmasını engelleyin.
Sonuç: Güvenlik Sonradan Eklenen Bir Yama Değil, Bir Zihniyettir
'Benim küçük sitemi kim hacklesin ki?' yanılgısına asla düşmeyin; saldırganlar hedeflerini manuel seçmez, internetteki tüm IP adreslerini durmaksızın tarayan otomatik botlar kullanır. Kod yazarken 'Kullanıcıdan gelen hiçbir girdiye güvenme' (Zero Trust) kuralını benimsediğinizde, sitenizi siber tehditlere karşı aşılmaz bir kaleye dönüştürürsünüz.