千家信息网

PHP7和PHP5在安全上有什么区别

发表于:2025-02-01 作者:千家信息网编辑
千家信息网最后更新 2025年02月01日,本篇内容主要讲解"PHP7和PHP5在安全上有什么区别",感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习"PHP7和PHP5在安全上有什么区别"吧!函数修改1.
千家信息网最后更新 2025年02月01日PHP7和PHP5在安全上有什么区别

本篇内容主要讲解"PHP7和PHP5在安全上有什么区别",感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习"PHP7和PHP5在安全上有什么区别"吧!

函数修改

1. preg_replace()不再支持/e修饰符

利用\e修饰符执行代码的后门大家也用了不少了,具体看官方的这段描述:

如果设置了这个被弃用的修饰符, preg_replace() 在进行了对替换字符串的 后向引用替换之后, 将替换后的字符串作为php 代码评估执行(eval 函数方式),并使用执行结果 作为实际参与替换的字符串。单引号、双引号、反斜线()和 NULL 字符在 后向引用替换时会被用反斜线转义.

很不幸,在PHP7以上版本不在支持\e修饰符,同时官方给了我们一个新的函数preg_replace_callback:

这里我们稍微改动一下就可以利用它当我们的后门:

2. create_function()被废弃

少了一种可以利用当后门的函数,实际上它是通过执行eval实现的。可有可无。

3. mysql_*系列全员移除

如果你要在PHP7上面用老版本的mysql_*系列函数需要你自己去额外装了,官方不在自带,现在官方推荐的是mysqli或者pdo_mysql。这是否预示着未来SQL注入漏洞在PHP上的大幅减少呢~

4. unserialize()增加一个可选白名单参数

$data = unserialize($serializedObj1 , ["allowed_classes" => true]); $data2 = unserialize($serializedObj2 , ["allowed_classes" => ["MyClass1", "MyClass2"]]);

其实就是一个白名单,如果反序列数据里面的类名不在这个白名单内,就会报错。

像这样的报错!

可以是类名也可以是布尔数据,如果是FALSE就会将所有的对象都转换为__PHP_Incomplete_Class对象。TRUE是没有限制的。也可以传入类名实现白名单。

还好现在是可选不是必选,要是默认FALSE逼程序员弄白名单那就真的吐血了。

5. assert()默认不在可以执行代码

这就是众多马不能用的罪魁祸首了,太多的马用assert()来执行代码了,这个更新基本就团灭,一般情况下修改成eval即可正常运行了~

提一下,菜刀在实现文件管理器的时候用的恰好也是assert函数,这导致菜刀没办法在PHP7上正常运行。

语法修改

1. foreach不再改变内部数组指针

&$n){     echo ""; } print_r($a); foreach ($a as $k=>$n){     echo "";  } print_r($a);

这样的代码在php5中,是这样的执行结果:

因为数组最后一个元素的 $value 引用在 foreach 循环之后仍会保留,在第二个循环的时候实际上是对之前的指针不断的赋值。php7中通过值遍历时,操作的值为数组的副本,不在对后续操作进行影响。

这个改动影响了某些cms的洞在PHP7上无法利用了….你知道我指的是哪个洞的。

这个问题在PHP7.0.0以后的版本又被改回去了,只影响这一个版本。

2. 8进制字符容错率降低

在php5版本,如果一个八进制字符如果含有无效数字,该无效数字将被静默删节。

比如这样的代码在php5中的执行结果如下:

但是在php7里面会触发一个解析错误。

这个问题同样在PHP7.0.0以后的版本又被改回去了,只影响这一个版本。

3. 十六进制字符串不再被认为是数字

这个修改一出,以后CTF套路会少很多啊~

很多骚操作都不能用了~

这个没什么好说的,大家都懂。

以上代码在PHP5运行结果如下:

PHP7运行结果如下:

你以为我要说这个在后续版本被改回去了?不,目前截至PHP7.3版本依然没有改回去的征兆,官方称不会在改了。这个讲道理还是蛮伤的。

4. 移除了 ASP 和 script PHP 标签

现在只有这样的标签能在php7上运行了。

字面意思,影响其实不是很大(只是以后骚套路会少一点)。

5. 超大浮点数类型转换截断

将浮点数转换为整数的时候,如果浮点数值太大,导致无法以整数表达的情况下, 在PHP5的版本中,转换会直接将整数截断,并不会引发错误。 在PHP7中,会报错。

CTF又少一个出题套路,这个问题我只在CTF上见过,影响应该不大。

到此,相信大家对"PHP7和PHP5在安全上有什么区别"有了更深的了解,不妨来实际操作一番吧!这里是网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!

版本 代码 字符 函数 影响 名单 官方 结果 运行 字符串 实际 安全 后门 套路 数字 数组 整数 时候 类名 问题 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 日历重复事件 数据库 无锡市数据软件开发平台 厦门吉橙网络技术有限公司 网络安全等级哪个部门管理 性别数据库为何要用12 腾讯云助手怎么登录服务器 达梦数据库加密密码 深圳泛钛氪互联网科技有限公司 网络安全攻防演练电力 幼儿园网络安全倡议书见解 如何管理刚租用的服务器 mssql 数据库迁移 u8应用服务器安装 网络安全月帖子 服务器内存低压和标压差多少性能 深圳考试软件开发公司 数据库课程设计实习日记 华域组件网络安全 海淀区先进软件开发排名 紫光电子档案数据库错误 计算机网络技术学科要求 数据库技术师考试科目 网络安全征文摘要 深圳直销软件开发定制公司 校服设计图软件开发 北京农达网络技术有限公司 期末考试数据库系统概论王珊 插入数据库出现1366错误 实惠的制造业管理软件开发企业 神通数据库查询一个表大小
0