点评:该intval
函数有一个特点:直到正数和负数或符号的
情况下开始做
转换,以满足一个非数字或字符串在转换结束( 0)
1。描述
的intval函数有一个特点:直到正数和负数或符号的情况下开始做转换,以满足一个非数字或字符串在转换结束( 0)
两。PHP
程序设计站分析
复制代码代码如下所示:
php_function(intval)
{
zval * num,** arg_base;
int基地;
开关(zend_num_args()){
案例1:
如果(zend_get_parameters_ex(1,努姆)= =失败){
wrong_param_count;
}
基=10;
打破;
案例2:
如果(zend_get_parameters_ex(2,num,arg_base)= =失败){
WRONG_PARAM_COUNT;
}
convert_to_long_ex(arg_base);
基地= z_lval_pp(arg_base);
打破;
违约:
wrong_param_count;
}
retval_zval(* num,1, 0);
convert_to_long_base(return_value,基地);
}
Zend / zend_operators。C > > convert_to_long_base()
hellip;hellip;
案例is_string:
strval = z_strval_p(OP);
z_lval_p(OP)= strtol(strval,null,基地);
str_free(strval);
打破;
当intval函数接受字符串
类型的
参数,它要求convert_to_long_base(),然后调用z_lval_p(OP)= strtol(strval,null,基地),和工艺参数通过strtol函数。
函数原型如下所示:
长整数strtol(const char* NPTR,char * endptr,int基地);
这个函数将参数字符串根据NPTR参数库长整数,参数库的范围从2到36,或0。参数基表示使用二进制数的方式,例如,基值为10,然后使用10十六进制数字。如果基值为16,则使用16阶等。
这个过程是:
Strtol()会扫描参数NPTR字符串和跳过前面的
空间特征,直到数字或正负号改变,然后转换将完成时,非数字或字符串结尾( 0),并将结果返回给。
所以当intval如果等用于判断,它会导致判断是有意义的,这会导致一个安全漏洞。
三。测试代码
复制代码代码如下所示:
/ / intval.php
$ 20070601 ;
如果(intval($变量))
它是安全的;
回声$ =;
;
var1 =1美元联盟选择1,1,1行政;
如果(intval($ VAR1))
它也很安全;
回声' $ var1 =var1美元;
>
四。实际应用
WordPress wp-trackback.php zend_hash_del_key_or_index SQL注入<= 2 /利用