Model dosyalarında veritabanından çekmek istediğimiz bilgiler için sorgu cümlelerini CodeIgniter`da farklı şekillerde yazabiliriz. Active Records kullanarak her komutu CodeIgniter komutu olarak kullanabileceğimiz gibi ($this->db->select, $this->db->from vs.), klasik sorgulama cümlesi olarak kendimiz de yazabiliriz.
Her iki durumda da sorgu cümlesine veri gönderirken her programcının korkulu rüyası olan SQL injection denilen, sorgu cümlesi içine zararlı kodlar enjekte edilerek veritabanından istenmeyen bilgiler çekme olasılığını en aza indirgememiz gerekir.
CodeIgniter`da, kullanıcıdan veri alırken kullanılan XSS filtreleri bu konuda pratik birer yardımcı olmalarına rağmen, sorgu sırasında herhangi bir unutkanlığı önlemek amacıyla tırnak karakterlerini kapatan bir XSS filtresi kullanmaktadır. Her tür bilgileri temizlemek için $this->db->escape_str() fonksiyonunu aşağıdaki gibi kullanmamız sql injection saldırılarına karşı iyi bir önlem olacaktır.
$sql = "INSERT INTO table (title) VALUES(".$this->db->escape_str($title).")";
Klasik yöntem ile kendi cümlemizi yazarak veritabanından bilgi çekmeye alışkınsanız, CodeIgniter`da bu yöntem ile çekilen bilgilerin güvenliğini sağlamak amacı ile Sorgu Bağlama (Query Binding) yöntemi geliştirilmiştir.
Bu yöntemde sorgu cümlenizde yerlerine değişken gelecek eşitlikleri soru işareti ile dolduruyorsunuz. Daha sonra ekleyeceğiniz dizi ile buraya gelen değişkenleri birleştirebilirsiniz. Bu yöntem ile $this->db->escape_str() fonksiyonuna gerek kalmadan, SQL Injection kontrolü otomatik olarak sağlanır.
$sql = "SELECT * FROM tablo_adi WHERE id = ? AND kullanici = ? AND yazar = ?"; $this->db->query($sql, array(3, 'user', 'Rick'));
Yukarıdaki kod parçasında soru işaretli yerlere sırasıyla gelecek dizi elemanları tanımlanmaktadır (id = 3 AND kullanici = `user` AND yazar = `Rick` olacaktır). Bu yöntem hem daha güvenli hem de imla açısından daha pratiktir.
Yazarı : Fatih BAZMAN | Yorum Ekle | Etiketler : Model SQL Güvenlik
Türkiye