电脑技术吧

会员投稿 会员登录 会员注册 网站公告:
搜索: 您现在的位置主页 > 网站开发 > PHP亚博ios下载地址 > PHP技巧 > 正文

php内置函数intval()使用不当的安全漏洞分析

作者:admin    文章来源:互联网 电脑技术吧     点击数:    更新时间:2011-09-27
收藏】 【挑错】 【推荐】 【打印
一、描述

intval函数有个特性:"直到遇上数字或正负符号才开始做转换,再遇到非数字或字符串结束时(\0)结束转换",在某些应用程序里由于对intval函数这个特性认识不够,错误的使用导致绕过一些安全判断导致安全漏洞.

织梦好,好织梦

二、分析 织梦好,好织梦

  PHP_FUNCTION(intval) 内容来自dedecms

  {

织梦好,好织梦

  zval **num, **arg_base;

织梦内容管理系统

  int base;

copyright dedecms

  switch (ZEND_NUM_ARGS()) {

内容来自dedecms

  case 1: 织梦内容管理系统

  if (zend_get_parameters_ex(1, &num) == FAILURE) { 内容来自dedecms

  WRONG_PARAM_COUNT;

dedecms.com

  } 内容来自dedecms

  base = 10; 织梦好,好织梦

  break; copyright dedecms

  case 2: dedecms.com

  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; copyright dedecms

  default:

织梦好,好织梦

  WRONG_PARAM_COUNT;

本文来自织梦

  }

本文来自织梦

  RETVAL_ZVAL(*num, 1, 0); 本文来自织梦

  convert_to_long_base(return_value, base);

织梦内容管理系统

  } dedecms.com

  Zend/zend_operators.c->>convert_to_long_base()

copyright dedecms

  …… 织梦好,好织梦

  case IS_STRING: dedecms.com

  strval = Z_STRVAL_P(op); 织梦内容管理系统

  Z_LVAL_P(op) = strtol(strval, NULL, base);

dedecms.com

  STR_FREE(strval); 织梦内容管理系统

  break; 织梦好,好织梦

织梦好,好织梦

当intval函数接受到字符串型参数是调用convert_to_long_base()处理,接下来调用Z_LVAL_P(op) = strtol(strval, NULL, base);通过strtol函数来处理参数。 织梦内容管理系统

函数原型如下: copyright dedecms

long int strtol(const char *nptr,char **endptr,int base);
本文来自织梦

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

织梦内容管理系统

流程为: 本文来自织梦

strtol()会扫描参数nptr字符串,跳过前面的空格字符,直到遇上数字或正负符号才开始做转换,再遇到非数字或字符串结束时(\0)结束转换,并将结果返回。 织梦内容管理系统

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

dedecms.com

三、测试代码

发表评论 请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
用户名:密码:新注册匿名
评论总数: [ 查看全部 ] 网友评论
关于我们 - 联系我们 - 广告服务 - 友情链接 - 网站地图 - 版权声明 - 人才招聘 - 在线帮助