小数时安全漏洞深入分析

2019-09-26 22:42栏目:网络时代
TAG:

php intval 与 int 的区别

变量转成整数类型。

变量转成整数类型。

$t ='165';

语法: int intval(mixed var, int [base]);

语法: int intval(mixed var, int [base]);

echo gettype((int)($t));
echo '<hr>';
echo gettype(intval($t));

返回值: 整数

返回值: 整数

//输出结果:integer integer value:165

函数连串: PHP 系统成效

函数种类: PHP 系统效用

$t ='a165';

 
内容表明

 
故事情节表明

echo gettype((int)($t));
echo '<hr>';
echo gettype(intval($t));

本函数可将变量转成整数类型。可归纳的参数 base 是改动的基底,默许值为 10。转变的变量 var 可认为数组或类之外的其余项目变量。

本函数可将变量转成整数类型。可粗略的参数 base 是更改的基底,默许值为 10。转变的变量 var 可认为数组或类之外的别的类型变量。

//结果 integer integer value:0,0

intval()使用不当的安全漏洞分析

intval()使用不当的安全漏洞深入分析

$string="2a";
$string1=intval($string);
echo '$string1的值:'.$string1.'$string2的值:';//单引号不会输出变量,将容貌输出
$string2=(int)($string);
echo $string2

intval函数有个天性:”直到遇上数字或正负符号才开始做调换,再遇上非数字或字符串停止时()甘休转变”,在少数应用程序里由于对intval函数这几个本性认知非常不足,错误的利用导致绕过一些钦州推断导致安全漏洞.

intval函数有个特色:”直到遇上数字或正负符号才起来做调换,再遭受非数字或字符串甘休时()甘休调换”,在某个应用程序里由于对intval函数这些本性认知远远不够,错误的施用导致绕过部分平安剖断导致安全漏洞.

二、分析

二、分析

 代码如下

 代码如下 复制代码
PHP_FUNCTION(intval)

PHP_FUNCTION(intval)

{

{

澳门新葡亰平台游戏,zval **num, **arg_base;

zval **num, **arg_base;

int base;

int base;

switch (ZEND_NUM_ARGS()) {

switch (ZEND_NUM_ARGS()) {

case 1:

case 1:

if (zend_get_parameters_ex(1, &num) == FAILURE) {

if (zend_get_parameters_ex(1, &num) == FAILURE) {

WRONG_PARAM_COUNT;

WRONG_PARAM_COUNT;

}

}

base = 10;

base = 10;

break;

break;

case 2:

case 2:

if (zend_get_parameters_ex(2, &num, &arg_base) == FAILURE) {

if (zend_get_澳门新葡亰平台官网,parameters_ex(2, &num, &arg_base) == FAILURE) {

WRONG_PARAM_COUNT;

WRONG_PARAM_COUNT;

}

}

convert_to_long_ex(arg_base);

convert_to_long_ex(arg_base);

base = Z_LVAL_PP(arg_base);

base = Z_LVAL_PP(arg_base);

break;

break;

default:

default:

WRONG_PARAM_COUNT;

WRONG_PARAM_COUNT;

}

}

RETVAL_ZVAL(*num, 1, 0);

RETVAL_ZVAL(*num, 1, 0);

convert_to_long_base(return_value, base);

convert_to_long_base(return_value, base);

}

}

Zend/zend_operators.c->>convert_to_long_base()

Zend/zend_operators.c->>convert_to_long_base()

……

……

case IS_STRING:

case IS_STRING:

strval = Z_STRVAL_P(op);

strval = Z_STRVAL_P(op);

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

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

STR_FREE(strval);

STR_FREE(strval);

break;  

break;

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

当intval函数接受到字符串型参数是调用convert_to_long_base()管理,接下去调用Z_LVAL_P(op) = strtol(strval, NULL, base);通过strtol函数来拍卖参数。

函数原型如下:

函数原型如下:

long int strtol(const char *nptr,char **endptr,int base);

long int strtol(const char *nptr,char **endptr,int base);

其一函数会将参数nptr字符串依据参数base来改变来长整型数,参数base范围从2至36,或0.参数base代表采用的进制方式,如base值为10则运用10进制,若base值为16则动用16进制等。

其一函数会将参数nptr字符串依据参数base来改动到长整型数,参数base范围从2至36,或0.参数base代表选取的进制格局,如base值为10则动用10进制,若base值为16则选拔16进制等。

流程为:

流程为:

strtol()会扫描参数nptr字符串,跳过前面包车型客车空格字符,直到遇上数字或正负符号才起来做转变,再碰着非数字或字符串结束时()甘休转变,并将结果回到。

strtol()会扫描参数nptr字符串,跳过前边的空格字符,直到遇上数字或正负符号才起来做调换,再遇到非数字或字符串甘休时()停止转变,并将结果回到。

那么当intval用在if等的决断当中,将会招致那些剖断实去意义,进而形成安全漏洞.

那正是说当intval用在if等的推断当中,将会促成那几个论断实去意义,进而致使安全漏洞.

三、测验代码

三、测验代码

 代码如下 复制代码
<?php
$o = 0.1;
for($a = 1; $a < 100; $a++){
$o += 0.1;
echo “<br />intval($o) = “.intval($o);
if(intval($o)){
print(“ true”);
}else{
print(“ false”);
}
}?>

 代码如下

输出结果:

<?php
$o = 0.1;
for($a = 1; $a < 100; $a++){
$o += 0.1;
echo “<br />intval($o) = “.intval($o);
if(intval($o)){
print(“ true”);
}else{
print(“ false”);
}
}?>

intval(0.2) = 0 false
intval(0.3) = 0 false
intval(0.4) = 0 false
intval(0.5) = 0 false
intval(0.6) = 0 false
intval(0.7) = 0 false
intval(0.8) = 0 false
intval(0.9) = 0 false
intval(1) = 0 false
intval(1.1) = 1 true
intval(1.2) = 1 true
intval(1.3) = 1 true
intval(1.4) = 1 true
intval(1.5) = 1 true
intval(1.6) = 1 true
intval(1.7) = 1 true
intval(1.8) = 1 true
intval(1.9) = 1 true
intval(2) = 2 true
…..  

输出结果:

php intval 与 int 的区别

intval(0.2) = 0 false
intval(0.3) = 0 false
intval(0.4) = 0 false
intval(0.5) = 0 false
intval(0.6) = 0 false
intval(0.7) = 0 false
intval(0.8) = 0 false
intval(0.9) = 0 false
intval(1) = 0 false
intval(1.1) = 1 true
intval(1.2) = 1 true
intval(1.3) = 1 true
intval(1.4) = 1 true
intval(1.5) = 1 true
intval(1.6) = 1 true
intval(1.7) = 1 true
intval(1.8) = 1 true
intval(1.9) = 1 true
intval(2) = 2 true
…..

 代码如下 复制代码
$t ='165';

php intval 与 int 的区别

echo gettype((int)($t));
echo '<hr>';
echo gettype(intval($t));

 代码如下

//输出结果:integer integer value:165

$t ='165';

$t ='a165';

echo gettype((int)($t));
echo '<hr>';
echo gettype(intval($t));

echo gettype((int)($t));
echo '<hr>';
echo gettype(intval($t));

//输出结果:integer integer value:165

//结果 integer integer value:0,0

$t ='a165';

$string="2a";
$string1=intval($string);
echo '$string1的值:'.$string1.'$string2的值:';//单引号不会输出变量,将容颜输出
$string2=(int)($string);
echo $string2  

echo gettype((int)($t));
echo '<hr>';
echo gettype(intval($t));

更加的多详细内容请查看:

//结果 integer integer value:0,0

$string="2a";
$string1=intval($string);
echo '$string1的值:'.$string1.'$string2的值:';//单引号不会输出变量,将姿容输出
$string2=(int)($string);
echo $string2

版权声明:本文由澳门新葡亰平台游戏发布于网络时代,转载请注明出处:小数时安全漏洞深入分析

    随机看看

    NEW ARTICLE

    热门文章

    HOT ARTICLE