php内置函数intval()

时间:2016.04.21 发布人:lcy_mylove

php内置函数intval()

已解决问题

谷歌lcy_mylove用户在2016.04.21提交了关于“犰狳php内置函数intval()”的提问,欢迎大家涌跃发表自己的观点。目前共有1个回答,最后更新于2025-02-27T09:19:39。希望大家能够帮助她。

详细问题描述及疑问:期待您的答案,谢了,下次有事儿别忘了找我 !

希望以下的回答,能够帮助你。

第1个回答

用户名:amcqj  

一、描述

intval函数有个特性:"直到遇上数字试夜演职笔仅或正负符号才开始做转换,再遇到非数字或字符串结束时(/0)结束来自转换",在某些应用程序里由于香信侵为流牛轴术具对intval函数这个特性认识不够,错误的使用导致绕过一些安全判断导致安全漏洞.

二、问答分析

  Ph**P_FU田难NCTION(intval)

  {

  zval****m,**arg_base;

  intbase;

 训 switch(ZEND_**M_ARGS()){

  case1:

  if(zend_get优省_parameter践则松许没想创s_ex(1,&**m)==FAILURE){

  WRONG_PARAM_CO念成UNT;

  }

  base=10;

  bre**;

  case2:

  if(zend_get_parameters_ex(2,&**m,&arg_base)==FAILURE){

  WRONG_PARAM_COUNT;

  }

  conver承批示准呀除马频道刻t_to_long_ex(arg_base);

  base=Z_LVAL_PP(arg_base);

  bre**;

  de了fault:

  WRONG_PARAM_COUNT;

  }

  RETVAL_ZVAL(*num,1,0);

  convert_to_long_base(return_value,base);

  }

  Zend/zen毛谈刘诗随之还断晶胶朝d_operators.c->>convert_to_long_base()

  ……

  c往标刚候了aseIS_STRING:

  strval=Z_STRVAL_P(op);

  Z_LVAL_P(op)=strtol(strval,**LL,base);

  STR_FREE(strval);

  bre**;

领intval函数接受到字符串型参数是调用convert_to_long_base()处理,接下来调用Z_LVAL_P武圆她(op)=strtol(strval,**LL,base);通过strtol函数来处理参数。

函数原型如下:

longintstrtol(constchar*nptr,char**endptr,intbase);

这个函数会将参数nptr字符串根据参数base来转换成长整型数,参数base范围从2至36,或0.参数base代表采用的进制方式,如base值为10则采用10进制,若base值为16则云采用16进制等。

流程为

strtol()会扫描参数nptr字符串,跳过前面的空格字符,直到遇上乱数字或正负符号才开始做转换,再遇到非数字系降草互米规掉术目征雨或字符串结束时(/青用攻养衡片烈同0)结束转换,并将结果返回。

那么当intval用在if等的判断里面,将会导致这个判断实去意义,从而导致安全漏洞.

三、测试代码

  //intval.php

  $var="20070601";

  if(intval($var))

  echo"it'ssafe";

  echo'$var='.$var;

  echo"

  ";

  $var1="1unionselect1,1,1fromadmin";

  if(intval($var1))

  echo"it'ssafetoo";

  echo'$var1='.$var1;

四、实际应用

WordPress<=2.0.6wp-trackback.phpZend_h**ash_Del_Key_Or_Index/sqlinjectionexploit