首页 > 编程语言 >【PHP系列】--变量覆盖

【PHP系列】--变量覆盖

时间:2024-04-08 18:55:40浏览次数:10  
标签:php 变量 覆盖 -- 参数 PHP EXTR

PHP变量覆盖
原创 嗜心 嗜心 2024-04-08 11:07 河南

当PHP开发者在编写代码时,很多时候为了方便会直接完全信任用户的输入,不做校验地赋值到自己程序的变量中。如果这时变量被传到了某些危险函数上,就会产生一些意想不到的后果。

变量覆盖的危害在于它能改变变量的值,一般都是配合其他函数/漏洞组合进行使用。

下面是php变量覆盖的一些用法举例:

<?php


$a=yuiop;

$b=world;

$$a=$b;

echo($yuiop);

?>

在以上的PHP语句中,首先把字母yuiop赋值给$a,再把world值赋予给$b,这时再定义一个变量$$a,这个时候呢,$$a会被解析成$yuiop;因为world值传给了$b,而$b的值赋值给了$$a,也就相当于把world值赋值给了$yuiop,这个时候进行echo yuiop也就相当于输出值world;

但是变量覆盖它在以下两种情况是会报错的:"$"符号后面紧跟着数字或者特殊符号的时候,也就是说$后面的第一位字符不能是数字或者特殊符号,否则变量就不会被覆盖。

这是因为php中变量的定义,$后面第一位可以跟汉字和字母,不能是数字或者特殊符号,不然就是非法变量。

在PHP中有以下几种变量覆盖方式,(1)php语法导致的变量覆盖,(2)PHP函数导致的变量覆盖(extra,parse_str,mb_parse_str,import_request_variables).(3)PHP配置项导致的变量覆盖(register_globals:php中的一个配置项,配置为true之后传入GET/POST参数都会被赋值成变量)。

下面是PHP变量覆盖漏洞利用的方法:
首先是语法方面的:就像上面举得例子一样,这就不再说,步骤同上面的例子一样。

函数方面的话:extra函数可以接受三个参数:第一个参数():类型是数组,分为key和value。key是变量名,value是变量值,如果没有定义value值为null

第二个参数:是一些可选的配置,如EXTR_OVERWRITE,假设变量已存在依旧覆盖,具体参数可以查看PHP文档。

第三个参数:前缀,仅在第二个参数为EXTR_PREFIX_SAME,EXTR_PREFIX_ALL,EXTR_PREFIX_INVALID或EXTR_PREFIX_EXISTS时生效

配置项导致的覆盖的话,需要在php.ini中设置register_globals =On,需要注意的是,这个配置项的话在5.3.0起废弃不用,在5.4.0起就被移除了。这个参数项就是把GET/POST参数注册为变量

标签:php,变量,覆盖,--,参数,PHP,EXTR
From: https://www.cnblogs.com/o-O-oO/p/18122313

相关文章

  • 流程引擎
    低代码8大能力引擎–流程引擎项造营流程引擎为自主研发,遵循WFMC/BPMN2.0的规范,可以将企业流程固化,提高员工的工作质量和效率,支持跨部门协同作业,提升组织管理能力,从而降低企业管理成本,并形成流程数据资产,加速企业数字化转型。 构建企业流程平台黑巢科技流程引擎平台旨在帮......
  • vuex分了多个模块,利用语法糖调用不同模块里的方法
    //store/modules/a.jsexportdefault{state:{...},getters:{...},mutations:{...},actions:{...}}//store/modules/b.jsexportdefault{state:{...},getters:{...},mutations:{...},actions:{...}}//store/in......
  • 1、安装tbase5.21.6.1数据库
    目录安装tbase5.21.6.1数据库1、创建用户:2、创建目录3、安装3、查看安装的目录4、创建initdb5、修改配置文件5.1、修改postgresql.conf5.2、修改pg_hba.conf6、启动数据库7、创建group8、设置用户的密码安装tbase5.21.6.1数据库安装包版本:tbase_pgxz-5.21.6.1-i.x86_64.rpm1、......
  • 超好用的tensorboardX!
    #tensorboardaddress#tensorboard--logdir/home/zy/pycharm/project/MetaSAug-main/cifar/logger/AccuracyfromtensorboardXimportSummaryWriterlogdir='cifar/logger/Accuracyage/test'writerTensor=SummaryWriter(logdir)title=f'Vali......
  • 2、tbase数据库迁移
    目录tbase数据库迁移1、登录psql2、创建管理用户3、创建数据库3.1、表空间存放文件3.2、创建表空间3.3、查看表空间列表4、创建新数据库5、创建用户并授权5.1、创建用户5.2、新增的用户交由adminuser用户管理6、创建用户空间6.1、创建表空间存放文件夹6.2、创建表空间6.3、如需要......
  • 队列-单端队列
    队列和栈非常类似,栈的一端是封闭的,类似一口深井,遵循先进后出原则FILO.队列则两端是放开的,抽象于现实世界的排队现象,遵循先进先出原则FIFO.队列在尾部进行元素的新增,称为"入队",然后从头部移除元素,成为"出队".生活中我们去坐火车进站检票,去某个机关办理......
  • Verification -- Basic Concepts ~ 2. Verification Stages
    VerificationStagesVerification的不同阶段可能因所使用的特定验证流程或方法而异。但是,Verification中的一些常见阶段包括:规划:在此阶段,定义验证目标、目的和范围,并制定验证计划。测试平台开发:此阶段设计开发一个测试平台环境,该环境可以激发设计并为测试提供适当的输入。......
  • 列车调度
    ​描述火车站的列车调度铁轨的结构如下图所示。两端分别是一条入口(Entrance)轨道和一条出口(Exit)轨道,它们之间有N条平行的轨道。每趟列车从入口可以选择任意一条轨道进入,最后从出口离开。在图中有9趟列车,在入口处按照{8,4,2,5,3,9,1,6,7}的顺序排队等待进入。如果要求它们必须按序号递减......
  • 说说对WebSocket的理解?应用场景?
    一、是什么WebSocket,是一种网络传输协议,位于OSI模型的应用层。可在单个TCP连接上进行全双工通信,能更好的节省服务器资源和带宽并达到实时通迅客户端和服务器只需要完成一次握手,两者之间就可以创建持久性的连接,并进行双向数据传输从上图可见,websocket服务器与客户端通过握手连......
  • C ++ 标准库 第六章
    第六章标准模板库6.1STL组件(Component)容器(Container):用来管理某类对象的集合。 迭代器(Iterator):用来在一个对象集合(collectionofobjects)内遍历元素。算法(Algorithm):用来处理集合内的元素。STL的基本观念就是将数据和操作分离。数据由容器类加以管理,操作则由可定制(con......