您好,欢迎访问三七文档
当前位置:首页 > 临时分类 > php内置函数intval使用不当的安全漏洞分析
()使用不当的安全漏洞分析一、描述intval函数有个特性:直到遇上数字或正负符号才开始做转换,再遇到非数字或字符串结束时(\0)结束转换,在某些应用程序里由于对intval函数这个特性认识不够,错误的使用导致绕过一些安全判断导致安全漏洞.二、分析PHP_FUNCTION(intval){zval**num,**arg_base;intbase;switch(ZEND_NUM_ARGS()){case1:if(zend_get_parameters_ex(1,&num)==FAILURE){WRONG_PARAM_COUNT;}base=10;break;case2:if(zend_get_parameters_ex(2,&num,&arg_base)==FAILURE){WRONG_PARAM_COUNT;}convert_to_long_ex(arg_base);base=Z_LVAL_PP(arg_base);break;default:WRONG_PARAM_COUNT;}RETVAL_ZVAL(*num,1,0);convert_to_long_base(return_value,base);}Zend/zend_operators.c-convert_to_long_base()……caseIS_STRING:strval=Z_STRVAL_P(op);Z_LVAL_P(op)=strtol(strval,NULL,base);STR_FREE(strval);break;当intval函数接受到字符串型参数是调用convert_to_long_base()处理,接下来调用Z_LVAL_P(op)=strtol(strval,NULL,base);通过strtol函数来处理参数。函数原型如下:longintstrtol(constchar*nptr,char**endptr,intbase);这个函数会将参数nptr字符串根据参数base来转换成长整型数,参数base范围从2至36,或0.参数base代表采用的进制方式,如base值为10则采用10进制,若base值为16则采用16进制等。流程为:()会扫描参数nptr字符串,跳过前面的空格字符,直到遇上数字或正负符号才开始做转换,再遇到非数字或字符串结束时(\0)结束转换,并将结果返回。那么当intval用在if等的判断里面,将会导致这个判断实去意义,从而导致安全漏洞.三、测试代码//intval.php$var=20070601;if(intval($var))echoit'ssafe;echo'$var='.$var;echo;$var1=1unionselect1,1,1fromadmin;if(intval($var1))echoit'ssafetoo;echo'$var1='.$var1;?四、实际应用WordPress=2.0.6wp-trackback.phpZend_Hash_Del_Key_Or_Index/sqlinjectionexploit
本文标题:php内置函数intval使用不当的安全漏洞分析
链接地址:https://www.777doc.com/doc-2850382 .html