Anti-armenia.ORG - Forumlar - PHP data type secure



Istifadəçi
    2012-04-17 01:56 GMT                 

substring



VIP
Mesaj Sayı : 73
Mövzu Sayı :
Rep Ver : 
Rep Sayı :   3  
Indi Saytda : Durum
Cinsiyyət : Oğlan
Şəhər :
Ölkə :
Məslək :
Yaş :
Mesaj :

Mövzunu Paylaş!


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

Anti-armenia.ORG
    

Istifadəçi
    2012-04-17 01:58 GMT                 

ProstoyBoy



İstifadəçi
Mesaj Sayı : 144
Mövzu Sayı :
Rep Ver : 
Rep Sayı :   0  
Indi Saytda : Durum
Cinsiyyət : Oğlan
Şəhər :
Ölkə :
Məslək :
Yaş :
Mesaj :

Mövzunu Paylaş!


Dəyərli məlumat..Təşəkkürlər

Haram ilə abad olanın, axrı bərbad olar!
Anti-armenia.ORG
    

Istifadəçi
    2012-04-17 03:26 GMT                 

BlackMinD



Pr0grammer
Mesaj Sayı : 1677
Mövzu Sayı :
Rep Ver : 
Rep Sayı :   62  
Indi Saytda : Durum
Cinsiyyət : Oğlan
Şəhər : KARABAKH IS AZERBAIJAN!
Ölkə :
Məslək :
Yaş :
Mesaj :

Mövzunu Paylaş!


Təşəkkürlər bro məlumata görə Minnətdaram
Razıyam ctype_digit() funksiyası ilə də ən çox da ondan istifadə edirəm.
Səbəb isə daima oturub burdan oxuyuram (xüsusilə commentləri) (http://www.php.net/download-docs.php *.chm xüsusilə English versiyası UP2DATE olur deyə)
Ordan tutmuşam ki,nə necə fail verir,nələr ola bilər və s.Məsləhət görürəm ümumiyyətlə PHP-ni öyrənən hər bir adam üçün Must have.

Type Casting=Type Juggling ən əsas anlardan biridir və məsuliyyətli yanaşma tələb edir.
Bir dənə də usefull belə bir metod var burda amma yoxlamırıq clientdən gələn nədir(Amma Force edirik variableni integerə deyək ki, skript int data type-a force etməlidir.)

Kod:
<?php

if(isset($_GET['id']))
{
$id = (int)$_GET['id']; //burda artiq avtomatik olaraq force etdik integer-e.
echo $id;
}


?>


Bu ən safe metod sayıla bilər xüsusilə həmin $id deyək mysql querydə dalneyşi istifadə olunacaqsa.(amma integer kimi)

Məsələn:
Kod:
/script.php?id=<script>alert(1);</script>


Və XSS almaq əvəzinə (misal üçün) səhifədə 0 görürük.
Yaxud:
/script.php?id=1233aBCDE!511545/*-

Output:
1233

Yəni type casting -type juggling-lə integere force etməklə canımızı "zir-zibildən" qurtulmuş etdik.

settype() vasitəsilə də juggling etmək olar amma benchmark nəticələri göstərir ki,bir qədər çox vaxt alır bu serverdə.(Performance-ni aşağı salır yəni)
Qəşəng mövzudur və əsas mövzudur.

Respect bro

Ana VƏTƏN!
Anti-armenia.ORG
    

Istifadəçi
    2012-04-17 04:34 GMT                 

substring



VIP
Mesaj Sayı : 73
Mövzu Sayı :
Rep Ver : 
Rep Sayı :   3  
Indi Saytda : Durum
Cinsiyyət : Oğlan
Şəhər :
Ölkə :
Məslək :
Yaş :
Mesaj :

Mövzunu Paylaş!


Təşəkkürlər bro əlavələrin maraqlı idi

Anti-armenia.ORG