CodeIgniter kullanılarak yazdığımız kodlarda, kullanıcıdan alınan bilgilerdeki zararlı kodların temizlenmesi için bir kaç aşamada filtre koyabiliriz.
Form_validation kütüphanesi ile her kullanıcı girdisi xss_clean opsiyonu kullanılarak temizlenir. Ancak şuna dikkat etmek gerekir ki, xss_clean opsiyonu ile sadece zararlı kodlar temizlenirken tırnak işareti eklenerek yapılan SQL Injection saldırıları temizlenmez.
Eğer kullanıcıdan aldığımız girdileri model dosyamızdaki fonksiyonlar ile veritabanından bilgi çekmekte kullanacaksak, Active Record sınıfını kullanmamız bu tür SQL Injection saldırılarını önlemek için yeterlidir. Bu durumda Active Record sınıfına ait fonksiyonlar bu tür sızlamaları engelleyeceklerdir. Aşağıdaki model fonksiyonu satırında $array ile aktarılan değişkende saldırı cümlesi olsa dahi temizlenecektir:
...
$this->db->get_where('users',$array);
...
Ancak bazı karmaşık sorgu gerektiren durumlarda active record sınıfı fonksiyonları kullanmak yerine, $this->db->query() fonksiyonunu kullanarak kendi sorgu cümlemizi kendimiz yazma yoluna gideriz. Böyle durumlarda dikkat edilmesi gerekli en önemli konu, kullanıcıdan alınan bilgilerdeki SQL Injection saldırılarının temizlenMEdiğidir. Aşağıdaki model fonksiyonu cümlesine zararlı kodlar gönderilmesi durumunda -en iyi ihtimalle- ekrana hata mesajı dönecektir.
...
$this->db->query("
SELECT
FROM users
WHERE username = '$input'
")
...
Active Record sınıfının kullanılamadığı durumlarda yapılması mutlaka gereken önkem, kullanıcı girişinin yapıldığı değişkenlerin mysql_real_escape_string filtresinden geçilrilmesidir. Buna göre controller sınıfı içinde okunan her kullanıcı girdisi için bu filtrenin kullanılmasında fayda vardır.
...
$username = mysql_real_escape_string($this->input->post('usersname'));
...
Yazarı : Fatih BAZMAN | Yorum Ekle | Etiketler : SQL Injection
Türkiye