Site genelinde adres satırı üzerinden değişken aktarma ihtiyacı hissettiğimiz durumlar olduğunda geneleneksel metod olarak $_GET fonksiyonunu kullanırız. Örneğin sayfa numaraları aktarma, ya da kullanıcı oturum (session) bilgisi buna örnektir. Ancak bu fonksiyon, XSS denilen (cross side scripting) bazı güvenlik açıklarına karşı korumasızdır.
CodeIgniter ile adres satırından veri aktarmak için öncelikle application/config dizini altındaki config.php dosyamız içindeki $config['enable_query_strings'] değişkenini "TRUE" olarak değiştirmeliyiz. Ancak bu işlemden sonra adres satırı üzerinden bilgi alabiliriz. Burada şuna dikkat etmemiz gerekir: adres satırında kullandığımız değişkenler config.php dosyasında tanımlı trigger`ler olamaz (c : controller, m: model, d: directory tanımıdır).
Bu noktadan sonra adres satırından değişkenleri almak için $_GET fonksiyonunu kullanmak yerine CodeIgniter`ın Input kütüphanesini kullanmak daha faydalıdır. Input kütüphanesi açılışta yüklenen kütüphanelerden biridir. Tekrar yüklenmesine gerek yoktur.
Adres satırından çağırdığımız değişkenin adı "sayfa" olsun. Deneme.php isimli controller dosyamız application/controllers dizini altına kopyalayalım. Deneme controller dosyamızın içeriği aşağıdaki gibi olsun:
class Deneme extends Controller {
function Deneme()
{
parent::Controller();
}
function index()
{
echo $get = $this->input->get("no");
}
}
CodeIgniter içinden get fonksiyonu ile çağırdığım no isimli değişkeni ekrana yazdırıyorum. Controller dosyasını yükledikten sonra siteadresim.com/deneme?no= linkinin sonuna XSS cheat sheet sayfasından alacağınız bir kodu ekleyip çağırabilirsiniz.
Ekranda XSS açığı olduğunu gösteren bir uyarı mesajı göreceksiniz. Burada CodeIgniter kütüphanesinden çağırdığınız get fonksiyonu olmasına rağmen açık olmasının nedeni bizim XSS filtresini açmamış olmamızdır. Eğer ki ekrana yazdırdığımız satıra "TRUE" eklersek, ekran görüntüsü daha temiz gelecektir.
class Deneme extends Controller {
function Deneme()
{
parent::Controller();
}
function index()
{
echo $get = $this->input->get("no",TRUE);
}
}
Input kütüphanesi kullanırken (post için de, get için de) XSS filtresini açmak için ikinci değişkenin TRUE olması gerektiğini unutmayınız.
Yazarı : Fatih BAZMAN | Yorum Ekle | Etiketler : XSS Güvenlik Açık
Türkiye