Bir web sitesi hazırlanırken en fazla dikkat edilmesi gereken konu tartışmasız bir şekilde güvenliktir. Güvenlik bir web site için her şeydir. Dışarıda bırakılacak ufak bir açık bile ağır sonuçlar doğurabilir.
Bu makalemizde basit anlamda güvenlik adına PHP formlarında alınabilecek birkaç ipucunu sizlere sunacağım.
1. PHP Etiketini Kapatın
Bir PHP dosyası oluştururken alınabilecek oldukça basit bir önlemdir. Bir dosyanın PHP kodlarını çalıştırabilmesi için PHP etiketleri arasında yazılmalıdır. Lakin yalnızca <?php etiketini ekleyip direkt yazmaya başlarsanız da sayfadaki kodlar okunacak ve çalışacaktır. Burada PHP etiketini kapatmamak bir problem yaratabilir. Bu sebeple özellikle üye olma ve üye giriş sayfalarında php etiketlerini kapatmayı untumayın.
YANLIŞ KULLANIM
<?php
/* Kodlar burada */
DOĞRU KULLANIM
<?php
/* Kodlar burada */
?>
2. PHP Güvenlik Fonksiyonları
PHP'de bir takım minik fonksiyonları birleştirerek güvenlik adına sağlam bir fonksiyon oluşturabiliriz.
a) addslashes()
Fonksiyonun işlevi çok basittir. Tırnak işaretlerinden önce tırnak işareti olarak algılanmasını sağlamak amacıyla / işareti ekler. Yani;
addslashes("password '123'")
Böyle bir kullanımının çıktısı;
password \'123\'
Böyle olacaktır.
b) htmlentities()
Bu fonksiyonumuz ise etiketleri görmezden gelir. Yani bir html etiketi olan < b > etiketinin işlevi çalışmaz. Şöyle ki;
htmlentities("<b>Deneme</b>")
Böyle bir kullanımının çıktısı;
<b>Deneme</b>
Böyle olacaktır.
c) strip_tags()
Tüm HTML, JavaScript ve PHP kodlarının çalışmasını engeller. Bu da aslında sayfaya verilebilecek alert uyarısını engellemek için kullanılır. Şöyle ki;
strip_tags("<script>alert('test');</script>")
Böyle bir kullanımının çıktısı;
alert('test');
Böyle olacaktır.
d) htmlspecialchars()
Özel işaretleri karakter cinsinden döndürür.
htmlspecialchars("<a href='isim'>Mert Topuz</a>")
Böyle bir kullanımının çıktısı;
<a href='isim'>Mert Topuz</a>
Böyle olacaktır.
3. PDO
İşin veritabanı kısmı ele alındığında eskiden kullanılan mysql_, PHP'nin 5.5 sürümü ile birlikte kullanılmamalı olarak duyuruldu. Akabinde PDO ile gerçekleştirilen veritabanı bağlantılarının çok daha güvenli olduğu belirtildi ve günümüzde veritabanı bağlantıları PDO ile sağlanmaktadır. Bu sebeple giriş işlemlerinde PDO tercih etmelisiniz.
4. Veri Uzunluğu
Formdan alınan verilerde uzunluk çok önemlidir. Mesela bizim veritabanımızda 10 karakter ayırdığımız kullanıcı adı ve parola alanlarını üye giriş sayfasında kontrol ettirirken uzunluklarını ilk kontrol edebiliriz ve eğer 10 karakterden büyükse hata verdirebiliriz. Bunun en büyük amacı URL Encode, Desimal ve Heksadecimal ataklarına karşı sistemi koruyabilmektir.
if(strlen($kullaniciAdi) > 10 || strlen($parola) > 10 ){echo "HATA";}
else{echo 'SORUN YOK';}
gibi bir kullanımı olabilir.
5. Tip Denetimi
PHP'de veritabanımızdaki tablolar veya gelen girdilerin türünü bilmek işimizi kolaylaştırabilir. Yalnızca bir sayı girilmesi beklenen bir alan düşünün. Bir telefon numarası veya yaş bilgisi alıyorsunuz. Bu alan bir script girilebilir. Bunu engellemek adına gelen veriyi PHP ile kontrolden geçirebiliriz. Bunun için is_int() fonksiyonunu kullanabiliriz. Ayrıca settype(), is_bool(), gettype(), is_float() ve is_string() fonksiyonlarını kullanabilirsiniz.
if(is_int($telefon)){echo 'TAMSAYI';}
else{echo 'HATA!';}
Sonuç
PHP'de bu tarz fonksiyonlar ile güvenliğinizi arttırabilirsiniz. Daha güvenli sayfalar için mutlaka bu fonksiyonları uygulamalı ve her alan için kontrolden geçirmelisiniz. İyi çalışmalar.