Codeigniter Serisi 8 – Input yapısı

PHP Programlama  Nisan 16, 2015

Değerli arkadaşlar,

Hepimiz bildiği gibi get, post, cookie gibi dış etkileşimlerden aldığımız bilgileri süzmek ve kontrol etmek isteriz. Bunun için CI bize hali hazırda bir sınıf sunmakta “Input” sınıfı. Bu sınıf sisteme otomatik olarak yüklenmektedir o yüzden load yordamıyla çağırmamıza gerek yok. En son tasarım etkileşimi ile ilgili yaptığımız çalışmayı açıyoruz. (https://github.com/halityurttas/codeigniter4sample adresinden indirebilir veya clone yapabilirsiniz)

2015-04-16 16_46_51-codeigniter4sample - NetBeans IDE 8.0.2

Bu daha önce ki çalışmamızda yaptığımız controller dosyamız. Burada gördüğümüz gibi post ile gelen datayı klasik php yöntemiyle aldık. Ancak bu bir çok sıkıntıyıda bize yaşatabilecek bir yöntem. Çünkü aldığımız veriyi ekrana yazdırıyoruz. XSS kaçınılmaz olabilir. Hemen yeni bir controller oluşturarak konuyu örnekleyelim. Controllerimizin adı bizimki2.php olsun.

Tabiki öncelikle yapmamız gereken bir nokta olarak bizimki.php adlı view dosyamızda ki form başlangıç satırını şu şekilde değiştirin.

<?php echo form_open('', array('class' => 'form-horizontal')); ?>

Şimdi dosyamızı oluşturup bakalım.

2015-04-16 17_03_27-codeigniter4sample - NetBeans IDE 8.0.2

Yeni dosyamız malumunuz adı bizimki2.php oldu ki class adımız da Bizimki2 oluyor. Daha sonra orjinal post yerine $this->input->post() fonksiyonunu kullandık. Burada ki tanım formdan gelen alanın adı. Ne oldu, eğer config dosyanızda $config[‘global_xss_filtering’] = TRUE; bu şekilde bir tanım var ise XSS ataklarını önleyecektir. Yok ise ne yapmamız gerek, iki seçenek var bu satırı ekleyin 🙂 veya post() fonksiyonunun içine yazdığımız tanımdan sonra bir virgül ekleyip TRUE eklemek olacaktır.

$page_data['isim'] = $this->input->post('isim', TRUE);

Bu örnek ile eğer global olarak gelen tüm inputların XSS korumasına alınmasını istemiyorsanız manuel olarak buradan TRUE diyerek XSS filtresi sağlayabilirsiniz. Ah evet bence tam tersi daha mantıklı, siz global XSS filtresini açın XSS filtresi yapmamasını istediğiniz (Html input alanları olabilir) yerlerde FALSE ile field bazında kapatmaya çalışın.

Gelelim neler var diye bakmaya, ilk olarak GET metodu yerine get() fonksiyonundan bahsetmeye. post() fonksiyonuyla aynı mantıkla çalışmaktadır. Sadece GET yerine kullanabiliyoruz. Ancak aklıma gelmişken eğer get() fonksiyonuna bir tanımlama vermezseniz size bir dizi döndürecektir.

$gets[] = $this->input->get();

Ne kadar süper değil mi? Böylece get ile aldığınız şeyleri bir döngüde kullanabilirsiniz. Peki ya XSS filtresi ile yapmak istesek? Çok basit TRUE yazarız dediğinizi duyuyorum ama yanlış, ilk parametre tanımlayıcı o yüzden şunu yapmalıyız.

$gets[] = $this->input->get(NULL, TRUE);

İlk parametre null olarak geçirilmiş olacak ve dizi elde edebileceksiniz. Aksi halde dizi değil ilk parametrede ne var ise onu aramaya çalışır.

Bu arada cookie() fonksiyonu da aynı mantıkla bir cookie değeri okumanızı sağlar. Yine içine tanımlama girerseniz tanıma göre girmezseniz liste olarak alır. Ve XSS filtreleme mantığı yine aynı şekilde. Peki bir çerez oluşturmak istersek, bunun iki yolu var ben dizi mantığıyla olanı anlatacağım daha fazlası için codeigniter.com adresinde ki orijinal dokümanına bakabilirsiniz. Fonksiyon set_cookie() dir ve parantezleri içerisine bir dizi verisi girmelisiniz. Dizinin alabileceği parametreler;

  • name : Çerezin tanımı (adı)
  • value : Değeri
  • expire : Tamsayı cinsinden saniye, tabi saniyesini … diyip nerden bilecem diye düşünürseniz bir saat için 60 * 60 ile dakika ile saniyeleri çarparak bir saatlik sürenin kaç saniye ettiğini bulabilirsiniz hatta 2 saat için bununla bir de 2 yi çarpın güzel fikir değil mi 🙂
  • domain : Hangi domaindeyseniz onu yazın, başına http www filan koymadan salt adres
  • path : bunu hala anlamamışımdır ama ana dizin için geçerli bir çerez ise / işareti geçirmeniz yeterli olacaktır
  • prefix : ön ek neye yarıyorsa
  • secure : TRUE güvenlik olsun, FALSE olmasada olur demek

Evet set_cookie() fonksiyonunun içine bu dizi elemanlarını geçirdiğinizde sizin için bir çerez oluşturacaktır. Her ne kadar input sınıfı bir output işlemi yapsada çerez bu sınıf altında işlenmiştir.

Ne ara lazım olur bilemedim ama SERVER değişkenlerini okumanız gerekiyorsa bunun içinde server() fonksiyonu var. Host filan çekmek için kullanılan bu değişkenlerin adını string olarak server fonksiyonu içine yazmanız gerek.

Evet birde input sınıfının ip_address() fonksiyonu var ki işe yarar birşey içerideki kullanıcının ip adresini alırsınız. valid_ip() fonksiyonu ile de bir ip adresinin geçerli olup olmadığını test ettirebilirsiniz. Daha fazlası için codeigniter dokümanlarına bakmanızı tavsiye ederim. Profesyönel kullanım amaçlı bir kaç fonksiyon daha var.

Bir sonraki yazıma kadar esenlikle kalın…

 

Bu yazı 2844 defa görüntülendi

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

This site uses Akismet to reduce spam. Learn how your comment data is processed.

Yazar Hakkında

15 yıllık çalışma hayatında birçok proje geliştirmiş binlerce projeyi inceleme fırsatı bulmuş yazılım aşığıdır. İşini hobi olarak gören yazarımız iş hayatını profesyonelce zevkle sürdürmektedir.

Son Eklenenler