Konuyu Açan
#1
Dikkat: Bu konuyu açmaktaki amacım, günlük uygulamalarda karşılaşılan riskleri net bir şekilde ortaya koymak ve pratik tedbirleri tartışmaktır. Aşağıdaki noktalar genel güvenlik farkındalığına yöneliktir; özel bir projeye uygulanmadan önce kendi bağlamınıza göre test edin.
PHP uygulamalarında cookies ile gelen verilerin SQL enjeksiyonu riskleri, çoğu geliştiricinin düşünmediği ayrıntılarda gizlenir. Aşağıdaki noktalar, bu riskleri nasıl tanımlayabileceğinizi ve nasıl azaltabileceğinizi gösterir.
1) Cookie içeriğinin doğrudan SQL’e eklenmesi
- Örneğin, kullanıcının kimlik veya tercihlerini saklayan bir cookie’nin değerinin, doğrudan SQL sorgusunda dize olarak kullanılması durumunda enjeksiyon riski doğar. Bu, kullanıcı kontrolü dışındaki verinin de sorguya dahil edilmesine olanak verir.
- Tedbir: Cookie değeri, veritabanı işlemleri için parametreli sorgular veya hazırlıklı ifadeler (prepared statements) ile alınmalıdır. Gelen değerler, gerektiğinde tür güvenliği sağlanarak temizlenmelidir.
2) Identifikasyon ve yetkilendirme verisinin cookie üzerinden doğrudan kullanılması
- Eğer bir cookie üzerinden alınan değerler, kullanıcıyı tanımlamak veya yetkilendirmek için kullanılıyorsa, bu değerlerin güvenliği kritik hal alır. Basit bir token’ın bozulması veya taklit edilmesi güvenlik açıklarına yol açabilir.
- Tedbir: Sunucu tarafında doğrulama ve oturum yönetimi için güvenli oturum kimlik doğruları, HttpOnly ve Secure bayraklı cookie’ler ile saklanmalı; ayrıca tokenlar sunucu tarafında türetilebilir ve karşılık gelen kullanıcı oturumu ile eşleşmelidir.
3) Cookie değerlerinin beklenmedik biçimde değiştirilmesi
- Kullanıcı tarayıcısında cookie’nin içeriği değiştirildiğinde SQL sorgusu beklenmedik davranışlar sergileyebilir. Bu, oturum sabitleme (session fixation) veya yetkisiz veri erişimine kapı aralayabilir.
- Tedbir: Sunucu tarafında cookie değerlerini doğrulayacak ek kontroller yapılmalı; mümkünse cookie’nin içeriği anlamlı bir kimlik (session id veya nonce) ile sınırlı tutulmalı ve veritabanı katmanında giriş kontrolleri güçlendirilmelidir.
4) Güvenli olmayan veri işleme zinciri
- Cookie’den gelen veriler önce doğrulanmalı, ardından uygun tipte olup olmadığı kontrol edilmelidir. Sayısal alanlar için CAST, metin alanları için uzunluk kısıtlamaları uygulanabilir.
- Tedbir: Validasyon katmanı eklemek; veriyi kullanmadan önce filtrelemek; hata yönetimini güvenli şekilde ele almak.
KOD
1234// Basit örnek: PDO ile güvenli sorgu
$stmt = $pdo->prepare('SELECT * FROM users WHERE id = :id');
$stmt->execute(['id' => (int)$_COOKIE['user_id']]);
$result = $stmt->fetchAll();
Bu konudaki deneyimleriniz nelerdir? Kullandığınız bir kimlik doğrulama akışı veya güvenli cookie tasarımında karşılaştığınız zorluklar var mı? Bulunduğunuz ortamda hangi ek kontrolleri önerirsiniz?
