[PHP安全特性學習]is_numeric()函數安全漏洞


簡介

 PHP函數的安全特性-is_numerice() 函數

簡介

PHP is_numeric() 函數

is_numeric() 函數用於檢測變量是否為數字或數字字符串。

語法:

bool is_numeric ( mixed $var )

 

$var:要檢測的變量。

返回值:

  如果指定的變量是數字和數字字符串則返回 TRUE,否則返回 FALSE。

函數正常使用測試代碼:

<?php
$var_name1=678;
$var_name2="a678";
$var_name3="678";
$var_name4="runoob.com";
$var_name5=698.99;
$var_name6=array("a1","a2");
$var_name7=+125689.66;
if (is_numeric($var_name1))
{
    echo "$var_name1 是數字" . PHP_EOL;
}
else
{
    echo "$var_name1 不是數字" . PHP_EOL ;
}
if (is_numeric($var_name2))
{
    echo "$var_name2 是數字" . PHP_EOL ;
}
else
{
    echo "$var_name2 不是數字" . PHP_EOL ;
}
 
$result=is_numeric($var_name3);
echo "[ $var_name3 是數字嗎? ]" .var_dump($result) . PHP_EOL;
$result=is_numeric($var_name4);
echo "[ $var_name4 是數字嗎? ]" .var_dump($result) . PHP_EOL;
$result=is_numeric($var_name5);
echo "[ $var_name5 是數字嗎? ]" .var_dump($result) . PHP_EOL;
$result=is_numeric($var_name6);
echo "[ $var_name6 是數字嗎? ]" .var_dump($result) . PHP_EOL;
$result=is_numeric($var_name7);
echo "[ $var_name7 是數字嗎? ]" .var_dump($result);
?>
View Code

 

返回結果:

678 是數字
a678 不是數字
bool(true)
[ 678 是數字嗎? ]
bool(false)
[ runoob.com 是數字嗎? ]
bool(true)
[ 698.99 是數字嗎? ]
bool(false)
[ Array 是數字嗎? ]
bool(true)
[ 125689.66 是數字嗎? ]
View Code

這個函數和mysql結合起來就容易出問題,那是因為is_numeric判斷的時候,當碰到16進制數的時候,也會判斷成數字

is_numeric函數對於空字符%00,無論是%00放在前后都可以判斷為非數值,而%20空格字符只能放在數值后。所以,查看函數發現該函數對對於第一個空格字符會跳過空格字符判斷,接着后面的判斷!

函數漏洞測試代碼:

<?php
echo '傳入:admin:'.is_numeric('admin');
echo '<hr>';
echo '傳入十六進制后的admin:'.is_numeric('0x61646D696E'); //十六進制轉化的admin
?>

 

%00繞過 其他的也能繞過例如在1后面加a 成為1a 之類的

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM