
İçerikler
Kullanıcılardan gelen değerleri direkt kayıt etmek her zaman için bir tehdit unsurudur. Kullanıcıların veri tabanına erişimlerinin açık olduğu yerlerde, kötü niyetli kişilerin var olacağı göz önüne alınarak bir takım önlenler alınmalıdır. Bu makalemde de form üzerinden gelen bilgilerin güvenliğini maksimum düzeyde nasıl sağlayacağımızdan bahsedeceğim.
Kullanıcılardan alınan her veri belirli filtrelerden geçirilmelidir. Bu makalede adım adım alınacak önlemleri listeleyeceğim.
Güvenlik Sağlayan Fonksiyonlar
PHP Programlama dili içerisinde gelen hazır fonksiyonlar bulunmaktadır. Bu fonksiyonlar güvenlik önemleri almak için de kullanılmaktadır.
addslashes() Kullanımı
Kulanıcıların zararlı içerik göndermesi için eklediği tırnak işaretini, ters bölü işareti ile engellemektedir. Bu sayede tırnak işaretinden doğan açıklar kapanmış olacaktır.
echo addslashes(" Merhaba, ben Ankara'da yaşıyorum. 'Araba' kullanıyorum ");
Yukarıdaki örnekte bir çok tırnak işareti kullanımı yer almaktadır. Tabi bu tarz kullanım bir açık yaratmayacaktır ama her türlü kontrolü göz önünde bulundurmak gerekecektir. Fonksiyonun kullanımıyla birlikte elde edilen çıktı; Merhaba, ben Ankara\’da yaşıyorum. \’Araba\’ kullanıyorum olacaktır. Veritabanına kayıt ederken de bu şekilde kaydı gerçekleştirilmelidir.
htmlentities() ve htmlspecialchars() Kullanımı
Bu fonksiyonlar HTML etiketlerini geçersiz kılarak direkt ekrana yazdıracaktır. Böylece kullanıcı tarafından gelen zararlı HTML içeriklerin derlenmeden ekrana yazdırılmasını sağlayabilirsiniz.
echo htmlentities("<b>ibrahim Çevrük</b>");
Yukarıdaki örnekte ibrahim Çevrük yazısının kalın yazılı bir şekilde derlenmesi beklenirken, HTML etiketlerinin ekrana yazılarak derlenme dışı bırakılmasını sağlayacaktır. Sonuç ise <b>ibrahim Çevrük</b> olacaktır.
Aynı şekilde htmlspecialchars() fonksiyonu da HTML etiketlerini karakter cinsize dönüştürerek ekrana yazdıracaktır.
echo htmlspecialchars("<b>ibrahim Çevrük</b>");
Yukarıdaki örneğin sonucu da <b>ibrahim Çevrük</b> olacaktır. Bu iki fonksiyon kullanılarak kullanıcılardan gelen HTML etiketleri geçersiz kılınarak işlenmelidir.
strip_tags() Kullanımı
Kimi zaman HTML etiketlerini gerçersiz kılmak yerine kompe silip temizlemek gerekebilir. Bunun içinde strip_tags() fonksiyonu kullanılmaktadır.
echo strip_tags("<script>alert(' Hacked By İBOOOOOOOO ');</script>");
Çok gariptir ki en çok kullanılma tipi de alert() kullanımıdır. Bu gibi durumlarla karşılaşmamak için strip_tags() fonksiyonu kullanılmalıdır. Sonuç ise alert(‘ Hacked By İBOOOOOOOO ‘); olacaktır.
PDO Kullanın
Bildiğiniz gibi mysql_* ifadeleri artık kullanılmamaktadır. Eski yapısının olması ve güvenlik açıklarına yol açmasından dolayı PDO tercih edilmelidir. Eski kullanımdaki güvenlik açıklarını kapatmak için gelen bir çok yama, PHP Programlama dilinin varlığını kötü etkilediği için eskiyi kapatıp, daha öncesinde var alan mimariyi güçlendirerek sundular. Böylece PHP, güvenilir diller arasına girmiş oldu. PDO kullanımı için tüm detaylara PHP Data Objects (PDO) Kullanımı isimli makaleden ulaşabilirsiniz.
Veri Tipi Denetimi
Kullanıcıdan alınan her bir veri, veri türüne göre kontroller yapılarak işleme alınmalıdır. Örneğin bir telefon numarası istenen bölümden, sayısal ifade dışında bir değerin yazılması beklenemez. Her zaman için beklenenin aksi bir değer ile karışılanacağı düşünülerek kontrol ifadeleri oluşturulmalıdır. Veri tipinin kontolleri için is_int(), is_string(), is_float(), gettype() ve settype() fonksiyonlarını kullanabilirsiniz.
if( !is_int( TELEFON NUMARASI ) ){ die( ' Telefon Numarası Sadece Sayısal Olabilir! ' ); }
Yukarıdaki gibi telefon numarası değerinin sayısal olmaması durumunda hata verip diğer kodların çalışmalarını engelleyebilirsiniz.
Veri Uzunluğunu Denetleme
Kullanıcıdan alacağınız veriler için belirli kısıtlamalar kullanın. Örneğin, kullanıcıdan bir şehir ismi yazmasını istemişseniz bu şehir isminin maksinin karakter sayısı bulunarak kısıtlama yapılmasını sağlamalısınız. Böylece belirli karakterler dışına çıkamamaları zararlı veriler yollamalarının önüne geçecektir. Karakterleri saymak için strlen() fonksiyonunu kullanabilirsiniz.
if( strlen(ŞEHİR) > 10 ){ die( ' Şehir ismi 10 Karakterden büyük olamaz! ' ); }
Yukarıdaki gibi gelen verilerin uzunluklarını kontrol ederek, kullanıcılardan gelen veriler için güvenlik önlemleri alabilirsiniz.