分析理解一个数字型参数过滤,对传参点进行严格类型限制的过滤函数(SQL注入的防护)
if($_GET['level'] && $_GET['id'])
/*获取客户端传入的参数*/
{
$id = $_GET['id'];
$level=$_GET['level'];
switch($level){
case 1:
/*使用intval函数进行转换,这里使用十进制进行base转换,返回变量var的integer数值*/
$id = intval($id);
$sql = queryStr($id);
$res = $db->getOneRow($sql);
sql_print($res);
break;
case 2:
/*使用is_numberic函数检测变量是否为数字或者数字字符串,但此函数允许输入为负数和小数*/
if(is_numberic($id))
{
$sql = queryStr($id);
$res = $db->getOneRow($sql);
sql_print($res);
}
break;
case 3:
/*使用ctype_digit函数检测字符串中的字符是否都是数字,负数和小数会检测不通过*/
if(ctype_digit($id))
{
$id = mysql_real_escape_string($id);
$sql = queryStr($id);
$res = $db->getOneRow($sql);
sql_print($res);
}
break;
default:
echo 'default';
}
}
intval() 函数
intval() 函数用于获取变量的整数值
intval() 函数通过使用指定的进制 base 转换(默认是十进制),返回变量 var 的 integer 数值
intval() 不能用于 object,否则会产生 E_NOTICE 错误并返回 1
语法
int intval ( mixed $var [, int $base = 10 ] )
参数说明:
$var:要转换成 integer 的数量值
$base:转化所使用的进制。
如果 base 是 0,通过检测 var 的格式来决定使用的进制:
如果字符串包括了 “0x” (或 “0X”) 的前缀,使用 16 进制 (hex);否则,如果字符串以 “0” 开始,使用 8 进制(octal);否则,将使用 10 进制 (decimal)
返回值:
成功时返回 var 的 integer 值,失败时返回 0。 空的 array 返回 0,非空的 array 返回 1
is_numberic函数
is_numeric() 函数用于检测变量是否为数字或数字字符串
语法
bool is_numeric ( mixed $var )
参数说明:
$var:要检测的变量
返回值:如果指定的变量是数字和数字字符串则返回 TRUE,否则返回 FALSE,注意浮点型返回空值,即 FALSE
ctype_digit()函数
ctype_digit()函数用于检测字符串中的字符是否都为纯数组
语法:
ctype_digit($text)
参数:
$text:要检测的一个字符串
返回值:
如果 $text 中的所有字符都为纯数字,则返回 TRUE 否则返回 false