PHP tabanlı ve kullanıcılarla etkileşimleri olan web sayfaları tasarlıyorsanız güvenlik konusunda son derece dikkatli olmalısınız. Bir web sayfasında kullanıcıdan form yoluyla aldığınız bir metni bir yerde ekrana yazdırmanız gerektiğini varsayalım. Ekrana yazdırma işleminin yapıldığı yerde print, printf, echo gibi bir PHP komutu kullanıyorsunuz. Kötü niyetli kullanıcı da bilgi girişi yapılması gereken yere bilgi değil de html, script hatta php kodları da girebilir. PHP nin print komutu da girilen metinler üzerinde herhangi bir filtreleme uygulamadan yazdıracaktır. Bu durumda kullanıcı isminin istendiği yere Mehmet yazmışsa PHP ekrana Mehmet yazacaktır. Buraya kadar sorun yok. Kullanıcı isminin istendiği yere "<font color=\"red\">mehmet</font> yazmışsa PHP nin print komutu ekrana kırmızı renkle Mehmet yazacaktır. Yani kullanıcının girdiği her html kodu, script vs. işlenecektir. Artık kötü niyetli ve işi bilen kullanıcının neler yapabileceğini tahmin edersiniz.
Bunu engellemek için aşağıda anlatacağım basit fonksiyonla girilen metinleri kontrolden geçirerek harf ve rakamlar dışında işaretler içeren metinleri kabul etmeyebilirsiniz.
Önce kodları verelim, açıklama sonra:
Gördüğünüz gibi neredeyse tek satır tutacak bir fonksiyon. "ereg" komutuyla kabul metinler için kabul edilebilir karakterleri belirtiyor, bunlar dışında bir değer geldiğinde fonksiyonumuzun false döndürmesini sağlıyoruz. Aslında temel amacı string içinde string aramak olan ereg komutunun kullanımı hayal gücünüze kalmış, bu tür fonksiyonlarda kullanarak işlerinizi epeyce kolaylaştırabilirsiniz. Daha fazla bilgi için google amcaya danışabilirsiniz. (veya ingilizcenize güveniyorsanız www.php.net/ereg)
Şimdi de bu fonksiyonu kullanarak veri sorgulayacak, hatalı girişlerde kullanıcıyı uyararak işlemi sonlandıracak fonksiyonumuzu yazalım:
foreach ile başlayan satırla scriptimize gelen tüm değişkenlere { } içindeki işlemleri uygulayacağımızı bildiriyoruz. daha sonra da alfa_dogrula fonksiyonundan false sonucunun gelmesi halinde kullanıcıya bir mesaj verip die(); komutu ile işlemi sonlandırıyoruz.