Qısaca PHP - nin 3 data type control funskiyasından bəhs etmək istəyirəm.Tez-Tez istifadə olunan is_numeric və intval və az işlədilən ctype_digit funksiyalarından.Proqramlama ilə məşğul olanlar bilir ki,bəzən alqoritma qurmağa vaxt sərf edərkən secure qalır 2 ci planda.Əsas məsələyə keçsək yaxınlarda yazdığım skripti debug edərkən daim istifadə etdiyim funksiyaların(is_numeric,intval) heç də kifayət qədər güvənli olmamasının şahidi oldum.Metoddan (GET,POST,REQUEST) asıli olmayaraq sanitize olunmuş sorğuya müdaxilə edəndə səhifə header-lə yönlənməli idi,nəticədə yönlənmədi :/ Analiz etdiyimdə fərqli nəticələr çıxdı.
Kiçik nümunə göstərsək
Kod:
<?php
$id = $_GET['id'];
if(is_numeric($id)){
echo "Variable tipi integer'dir";
}else{
echo "Variable tipi stringdir'dir";
}
?>
$_GET - metodu ilə gələn dəyərin 1212a2 hexdecimal qarşılığı (0x313231326132) olarsa (integer olmasada,əgər ilk xarakter rəqəm olsa nəticə Variable tipi integer'dir)
hər 2 funksiyada (is_numeric və intval)
Nəticə olaraq Variable tipi integer'dir yazısı çıxacaq ki,bu da heç də ürəy açmır
Çarə olaraq ctype_digit funksiyasını istifadə edərək problemi kökündən həll etmək qalır.Belə ki,ctype_digit hexdecimal xarakterləri qəbul etmədiyi üçün
Kod:
0x313231326132 və ya 1212a2 göndərsəz belə
code]
Kod:
<?php
$id = $_GET['id'];
if(ctype_digit($id)){
echo "Variable tipi integer'dir";
}else{
echo "Variable tipi stringdir'dir";
}
?>
Nəticə olaraq Variable tipi integer'dir yazısı çıxacaq