位置: 编程技术 - 正文

详解php比较操作符的安全问题(详解php比较操作过程)

编辑:rootadmin

推荐整理分享详解php比较操作符的安全问题(详解php比较操作过程),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:详解php比较操作过程,详解php比较操作方法,详解php比较操作方法,php的比较运算符有哪些,详解php比较操作过程,php ide比较,详解php比较操作方法,详解php比较操作,内容如对您有帮助,希望把文章链接给更多的朋友!

php的比较操作符有==(等于)松散比较,===(完全等于)严格比较,这里面就会引入很多有意思的问题。

在松散比较的时候,php会将他们的类型统一,比如说字符到数字,非bool类型转换成bool类型,为了避免意想不到的运行效果,应该使用严格比较。如下是php manual上的比较运算符表:

0x 安全问题

1 hash比较缺陷

php在处理hash字符串的时候会用到!=,==来进行hash比较,如果hash值以0e开头,后边都是数字,再与数字比较,就会被解释成0*^n还是为0,就会被判断相等,绕过登录环节。

root@kali:~/tool# php -r 'var_dump("e" == "0");var_dump("0e"=="0");var_dump("0eabc"=="0");'bool(true)bool(true)bool(false)

当全是数字的时候,宽松的比较会执行尽力模式,如0e会被解释成0*^,除了e不全是数字的时候就不会相等,这能从var_dump("0eabc"=="0")可以看出来。

2 bool 欺骗

当存在json_decode和unserialize的时候,部分结构会被解释成bool类型,也会造成欺骗。json_decode示例代码:

运行结果:

root@kali:/var/www# php /root/php/hash.phplogined in as bool

unserialize示例代码:

运行结果如下:

root@kali:/var/www# php /root/php/hash.phplogined in unserialize

详解php比较操作符的安全问题(详解php比较操作过程)

3 数字转换欺骗

将user_id=0.发送出去得到结果如下:

Array( [0] => 0 [1] => lxx' [2] => [3] => [4] => [5] => )

本来是要查询user_id的数据,结果却是user_id=0的数据。int和intval在转换数字的时候都是就低的,再如下代码:

假如传入1.1,就绕过了$_POST['uid']!=1的判断,就能对uid=1的用户进行操作了。另外intval还有个尽力模式,就是转换所有数字直到遇到非数字为止,如果采用:

攻击者传入 union select version()进行攻击。

4 PHP5.4.4 特殊情况

这个版本的php的一个修改导致两个数字型字符溢出导致比较相等

$ php -r 'var_dump("" == "");'bool(true)

3 题外话:

同样有类似问题的还有php strcmp函数,manual上是这么解释的,int strcmp ( string $str1 , string $str2 ),str1是第一个字符串,str2是第二个字符串,如果str1小于str2,返回<0,如果str1>str2,返回>0,两者相等返回0,假如str2为一个array呢?

运行结果:

root@kali:~/php# php strcmp.phpPHP Warning: strcmp() expects parameter 2 to be string, array given in /root/php/strcmp.php on line Welcome!

比较多种类型

运算数 1 类型 运算数 1 类型 结果 null 或 string string 将 NULL 转换为 "",进行数字或词汇比较 bool 或 null 任何其它类型 转换为 bool,FALSE < TRUE object object 内置类可以定义自己的比较,不同类不能比较,相同类和数组同样方式比较属性(PHP 4 中),PHP 5 有其自己的说明 string,resource或 number string,resource或 number 将字符串和资源转换成数字,按普通数学比较 array array 具有较少成员的数组较小,如果运算数 1 中的键不存在于运算数 2 中则数组无法比较,否则挨个值比较(见下例) array 任何其它类型 array 总是更大 object 任何其它类型 object 总是更大

php实现微信发红包 本文实例讲述了php实现的微信红包算法。分享给大家供大家参考。具体如下:具体代码:php/***微信红包的类**/CLASSWXHongBao{private$mch_id="";//商户ID写死

PHP微信红包API接口 首先给大家看一看这个表格:根据微信高级红包接口,开发PHP版本的API接口,现在进行主要代码分析。红包接口调用请求代码,所有请求参数为必填参

使用PHP实现下载CSS文件中的图片 作为一个资深并且专业的扒皮人员,在我从初三开始投入伟大的互联网中到现在积累了丰富的扒皮经验。我相信每个做web的程序员也都会有类似的经历

标签: 详解php比较操作过程

本文链接地址:https://www.jiuchutong.com/biancheng/276172.html 转载请保留说明!

上一篇:thinkPHP模型初始化实例分析(thinkphp6调用模型的方法)

下一篇:php实现微信发红包(php实现微信发红包的方法)

  • 增值税专用发票可以开电子发票吗
  • 税款滞纳金和利息
  • 自己企业生产的物料入库单由谁填写
  • 城市维护建设税是什么意思
  • 支付给外包公司的工资备注怎么写
  • 银行承兑质押金的会计分录
  • 旅客运输进项税可以加计抵减么
  • 豆粕是农产品初加工,企业所得税免税
  • 汇兑损益在外币业务核算中有什么重要意义
  • 投资公司的利息支出可抵扣吗
  • 金蝶软件怎么设置会计科目
  • 通信服务费计入什么科目
  • 税控盘维护费抵减分录
  • 垫付的医药费怎么理赔
  • 分公司的发票可以由总公司开吗
  • 受托加工物资算资产吗
  • 土地收储的含义
  • 税控盘登不上怎么回事
  • 消耗性生物资产是指什么
  • 收到服务费分录怎么写
  • 已认证的发票退货怎么处理
  • 其他综合收益包括留存收益吗
  • win10点搜索
  • 工程结算书和竣工结算书
  • timit数据集
  • 商品房契税申报是增量房申报吗
  • 付了款对方不开发票
  • 办公用品开发票有哪些
  • 安斯海滩上的角眼沙蟹,塞舌尔普拉兰岛 (© Ingo Schulz/Offset by Shutterstock)
  • 稿酬所得收入额含税吗
  • 财税2016年12号文件解读
  • 盘点那些神级翻唱现场
  • 纳税申报系统里怎么填写
  • 基于python语言
  • 织梦怎么建站
  • 织梦怎么改网站主页
  • 两个公司的钱转来转去
  • 预付账款和挂账的区别
  • 一般计税方法下自来水公司(一般纳税人)销售自来水
  • 企业会计准则子公司
  • 企业筹建期间是什么
  • 认证发票抵扣有留抵税怎么做分录
  • 坏账准备的账务处理
  • 限售股算不算账户资产
  • 内账会计的主要工作
  • 本年利润怎么结转成未分配利润
  • 企业借款利息如何计算
  • 退还多余的预收款项的会计分录
  • 停产工人工资计入哪个科目
  • 主营业务利润的会计分录
  • 进项税转出怎样做账务处理
  • 旅游应当提示参加团队旅游的旅游者按照规定购买什么
  • 设备基础属于什么基础
  • 私产公产企业产
  • sqlserver 储存过程
  • mysql8.0远程连接
  • sqlserver允许一列列值重复
  • macbookpro如何扫描
  • 操作系统运行慢怎么解决
  • ubuntu升级到21.04
  • windowsxp的安装方法
  • 远程桌面的文件怎么无法复制到本地桌面
  • win7旗舰版更改适配器没有蓝牙连接
  • winxp开启远程桌面连接
  • win10升级最新版
  • Win10 Mobile 10586.242累积更新上手视频评测
  • windows7 远程连接
  • js 编辑框
  • jsp验证邮箱格式
  • Div CSS absolute与relative的区别小结
  • 详解js的异步编码
  • 在unity中单例的主要作用
  • js实现滚动条
  • shell脚本模拟ctrl
  • 北京税务机关代码查询
  • 注销一般户需要基本户的开户许可证吗
  • 浙江纳税百强2020
  • 我国税务师事务所有哪些
  • 江苏省国税局局长是谁
  • 个体开专用票需要进项吗
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    友情链接: 武汉网站建设