位置: 编程技术 - 正文

详解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实现微信发红包的方法)

  • 单独计税的年终奖怎么算
  • 非商业性旅游服务
  • 税务安全证书应用客户端
  • 红字发票已抵扣和未抵扣是什么意思
  • 银行收费错误当天怎么办
  • 调整上年度所得税计提分录
  • 企业工资薪酬包括哪些内容
  • 城镇土地使用税的计税依据
  • 案例分析小规模纳税人月销售不足3万如何处理?
  • 企业所得税研发费用100%扣除的有哪些企业
  • 金穗开发票时怎样添加商品?
  • 专用发票和普通发票费率
  • 出口进项税额转出怎么做账务处理
  • 个体户超过3万怎么纳税
  • 国税2016年第53号公告解读
  • 提供餐饮服务的税率
  • 企业职工福利费扣除标准
  • 7年利率多少
  • 只有专票没有普票
  • 车辆购置税完税证明电子版二维码怎么扫
  • 投资的子公司亏损注销
  • 个税手续费返还要交增值税吗
  • 事假扣款进什么科目
  • PHP:session_commit()的用法_Session函数
  • 企业的往来账款包括哪些
  • 小规模纳税人差额征税
  • php写的代码怎么运行
  • php加密后怎么运行
  • 员工的医药费
  • 公司制作横幅计入什么科目?
  • 编译安装php8
  • 以前年度少记税金及附加
  • bert获取中文词向量
  • js获取当前日期的函数
  • 创建command对象
  • 超市的购物卡以什么为准
  • 基本户转到法人账户会计分录
  • 官方的问答
  • 发票收到款项未付做什么凭证编制
  • 已冲销凭证是否可以删除
  • 农产品来源用途是什么
  • 抵债不动产处置如何征税
  • 简述sql server 2008的新增功能
  • 个体工商户免费开票额度
  • 管理费用属于费用类吗
  • 租房合同 陷阱
  • 主营业务成本的摘要怎么写
  • 作废的发票也要交印花税吗
  • 建造合同信息表
  • 制造费用主要核算项目
  • 租赁公司异地经营
  • 长期股权投资成本法会计处理
  • 企业发生的经济业务主要有哪些
  • 应付票据和应付债券的区别
  • 小规模减半征收房产税文件
  • 其他费用包括哪些内容
  • 外购固定资产
  • sql server数据库查询语句
  • linux安装linux
  • windows怎么将任务栏放大
  • windows7桌面出现一个窗口删除不了
  • linux系统中的用户分为哪几类
  • win10企业版20h2和1909
  • mac设置在哪里设置
  • win8右边栏设置
  • windows 10 build 21382
  • 每天看30分钟手机可以吗
  • 基于stm32的100个毕业设计
  • node.js快速入门
  • 3行程序搞定SVM分类-用JAVA程序调用LibSVM API 最简单的示例
  • unity优化gc
  • 举例简介三国演义人物塑造的主要手法
  • shell脚本逐条执行
  • python web网站
  • jquery 遍历
  • js继承的方法
  • 煤炭资源税税率调整
  • 开量贩ktv一年能赚多少
  • 长春市医保社保什么时候年检
  • 游艇车船税怎么收
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    友情链接: 武汉网站建设