变量转成整数类型。 语法: int intval(mixed var, int [base]); 返回值: 整数 函数种类: PHP 系统功能 内容说明 本函数可将变量转成整数类型。可省略的参数 base 是转换的基底,默认值为 10。转换的变量 var 可以为数组或类之外的任何类型变量。 intval()使

变量转成整数类型。

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

返回值: 整数

函数种类: PHP 系统功能

内容说明

本函数可将变量转成整数类型。可省略的参数 base 是转换的基底,虚拟主机,默认值为 10。转换的变量 var 可以为数组或类之外的任何类型变量。

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

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

二、分析

代码如下 复制代码

PHP_FUNCTION(intval)

{

zval **num, **arg_base;

int base;

switch (ZEND_NUM_ARGS()) {

case 1:

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

WRONG_PARAM_COUNT;

}

base = 10;

break;

case 2:

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()

……

case IS_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函数来处理参数。

函数原型如下:

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字符串,跳过前面的空格字符,直到遇上数字或正负符号才开始做转换,再遇到非数字或字符串结束时()结束转换,香港虚拟主机,并将结果返回。

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

三、测试代码

代码如下 复制代码

$o = 0.1;

for($a = 1; $a < 100; $a++){

$o += 0.1;

echo “
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 的区别

代码如下 复制代码

$t ='165';

echo gettype((int)($t));

echo '


';

echo gettype(intval($t));

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

$t ='a165';

echo gettype((int)($t));

echo '


';

echo gettype(intval($t));

//结果 integer integer value:0,0

$string="2a";

$string1=intval($string);

echo '$string1的值:'.$string1.'$string2的值:';//单引号不会输出变量,美国服务器,将原样输出

$string2=(int)($string);

echo $string2

更多详细内容请查看:

php intval 变小,php intval() 小数时安全漏洞分析相关推荐

  1. MUI - 解决弹出输入法时页面高度变小导致底部上浮的问题

    MUI - 解决弹出输入法时页面高度变小导致底部上浮的问题 参考文章: (1)MUI - 解决弹出输入法时页面高度变小导致底部上浮的问题 (2)https://www.cnblogs.com/phil ...

  2. 爱剪辑编辑好视频,导出时,微信上视频长宽变小解决方法!

    爱剪辑编辑好视频,导出时,微信上视频长宽变小解决方法! 参考文章: (1)爱剪辑编辑好视频,导出时,微信上视频长宽变小解决方法! (2)https://www.cnblogs.com/gfwei/p/ ...

  3. Threejs使用精灵Sprite作为标签,鼠标悬浮精灵上时鼠变小手

    1,介绍 该示例使用的是 r95版本Three.js库. 主要实现功能:引用模型进行展示,使用精灵Sprite作为标签,鼠标悬浮精灵上时变小手. 效果图如下: 2,主要说明 使用精灵Sprite作为标 ...

  4. 视频教程-Word从小白变小能手 -Office/WPS

    Word从小白变小能手 熟练python 独立开发相关程序 熟练使用django,tornado 框架相关开发技术 熟悉常用机器学习和深度学习算法的软件库TensorFlow,如线性回归.逻辑回归.聚 ...

  5. 面试题:mysql 表删除一半数据,B+树索引文件会不会变小???

    今日寄语:努力的阶段,往往是最不养生的阶段! 一张千万级的数据表,删除了一半的数据,你觉得B+树索引文件会不会变小? (答案在文章中!!) 我们先来做个实验,看看表的大小是如何变化的?? 做个实验,让 ...

  6. javascript基础——文字变大变小className的使用及JS浮动的兼容用法

    文字变大变小,详情页比较常见的那种 <!DOCTYPE html> <html lang="en"> <head><meta charse ...

  7. 电脑达人教你怎么解决Win7系统盘渐渐变小的问题

    一般在安装软件时,安装下载后如果没有改动都会默认的存在C盘上的,所以C盘所占据的内存就会很多很大,但是有时C盘的存在也是虚拟的内存占据了,所以要解决关于系统盘越来越小的问题,那么现在一起来看看怎么的解 ...

  8. iOS AVAudioSession 配置(录音完声音变小问题)

    有这么一个场景,首先我们录音,录音完再播放发现音量变小了: 百思不得其解,查看API发现AVAudioSession里面有这么一个选项, 如果你的app涉及到了音视频通话以及播放其他语音,那么当遇到声 ...

  9. 出门就背他了!可伸缩的背包,自由变大变小,还有防盗功能!

    ▲ 点击查看 出门能不背包就不背包,几乎是小爆身边每个男生的人生信条. 不背包时,两手空空一身轻,潇洒有型. 但一旦到了必须背包,比如五一外出回家或旅游的时候,男同胞们翻箱倒柜找出来的背包,大多都是这 ...

最新文章

  1. 谷歌全新轻量级新模型ALBERT刷新三大NLP基准
  2. MYSQL专题-MySQL三大日志binlog、redo log和undo log
  3. handlersocket安装配置
  4. 一起玩转LiteOS组件:Pixman
  5. 【干货】2020年陆奇最新万字演讲:世界新格局下的创业创新机会.pdf(附下载链接)...
  6. 华为发布最强 AI 处理器昇腾 910,全场景 AI 框架 MindSpore 将开源
  7. 计算机达人成长之路(8)连载
  8. 终结者2显示天网服务器,《终结者2:审判日》天网觉醒秘测开服公告
  9. SECS/GEM series: Protocol Layer
  10. 在属性级情感分析中结合BERT和语法信息
  11. 思维导图,UML在线画图工具
  12. 合肥市关于印发合肥市大数据发展行动纲要(2016—2020)的通知
  13. C#打造一个开源webgis(四)地图客户端(上)
  14. DB2查看事务日志使用空间
  15. burpsuite之CSRF测试
  16. python计算复数的辐角_Python 自定义类中的函数和运算符重载
  17. 51 Best DevOps Tools for #DevOps Engineers
  18. 用python计算π值(模拟法)
  19. 最新历史版本 :LINUX KERNEL 配置编译中文指南
  20. (4.3C)神奇的口袋

热门文章

  1. 彻底搞懂JVM类加载器:基本概念
  2. Redisson实现Redis分布式锁的N种姿势
  3. 从这个11.11开始,终结数据结构与算法的噩梦
  4. Spring Cloud Config采用Git存储时两种常用的配置策略
  5. 有多少人在51job上找到工作_打工人都是人上人的原因找到了!
  6. CVPR 2021 论文大盘点-行人技术篇
  7. 人脸对齐端到端Super-FAN
  8. torch 多维topk
  9. TeamViewer 14 on Nvidia Jetson TX2
  10. yolo类检测算法解析——yolo v3