PHP7和PHP5在安全性方面的区别

发布者:上海IT外包来源:http://www.lanmon.net点击数:1286

在测试之前,我发现许多斩波器的马不能使用。马来西亚也差不多3/4无法在php7中正常运行。互联网上的百度没有找到太多相关文章,他们总结了对安全性差异的测试。
功能修改
1. preg_replace()不再支持/e修饰符
使用\ e修饰符的代码后门也被大量使用,请参阅本节的官方说明:
如果设置了这个deprecated修饰符,preg_replace()将对替换字符串执行post-reference替换,将执行评估为php代码(eval函数),并将执行结果用作实际参与替换的字符串。单引号,双引号,反斜杠()和NULL字符在被后向引用替换时使用反斜杠进行转义。
不幸的是,PHP7及以上版本不支持\ e修饰符,官方函数为我们提供了一个新函数preg_replace_callback:
在这里,我们可以稍作改动,将其用作后门:
2.不推荐使用create_function()
有一个较少的函数可以用作后门,实际上它是通过执行eval实现的。这是可选的。
3. mysql_ *系列完全删除
如果你想在PHP7上使用旧版本的mysql_ *系列函数,你需要自己安装它。官方没有附带它。现在官方推荐的是mysqli或pdo_mysql。这是否表明PHP中未来SQL注入漏洞的显着减少?
为了特殊指示,我没有深入挖掘目标站上的sql注入,所有预编译!
4. unserialize()添加一个可选的白名单参数
$ data=unserialize($ serializedObj1,['allowed_classes'=>
真正]);
$ data2=unserialize($ serializedObj2,['allowed_classes'=>
['MyClass1','MyClass2']]);
事实上,它是一个白名单。如果反序列数据中的类名不在此白名单中,则会报告错误。像这样的错误!
它可以是类名或布尔数据。如果为FALSE,则所有对象都将转换为__PHP_Incomplete_Class对象。 TRUE是无限的。您还可以传入类名以实现白名单。
该死的,幸运的是,它现在是可选的。如果默认的FALSE强制程序员将其列入白名单,那么它确实会呕吐血液。
5.默认情况下,assert()不可执行。
这是许多马不能使用的罪魁祸首。太多马使用assert()来执行代码。此更新基本上已被破坏。通常,在改为eval~后可以正常运行
值得一提的是,文件管理器中使用的菜刀也是断言功能,这使得菜刀无法在PHP7上正常运行。
语法修改
1. foreach不再更改内部数组指针
上面的代码在PHP5中运行如下:
PHP7的结果如下:
您认为我必须说在后续版本中已经改变了吗?不,从最新的PHP7.3版本开始,仍然没有任何变化迹象,该官员表示不会改变。这种推理仍然很受伤。
4.删除ASP和脚本PHP标记
现在只有这样的标签可以在php7上运行。
从字面上看,影响实际上并不是很大(将来会略微减少)。
5.大浮点类型转换截断
将浮点数转换为整数时,如果浮点值太大而无法表示为整数,则在PHP5版本中,转换会直接截断整数并且不会引发错误。在PHP7中,将报告错误。
CTF还有一个问题设定程序。我只在CTF上看过这个问题,影响应该很小。

Exec(),system()passthru()函数为NULL添加保护。
List()不能再解锁字符串字符串变量
$ HTTP_RAW_POST_DATA已删除
不推荐使用__autoload()方法
Parse_str()将直接将字符串导入当前符号表而不添加第二个参数。如果添加它,它将被转换为数组。现在第二个参数是强制选项。
统一整个平台的长度
Session_start()可以添加一个数组来覆盖php.ini配置
后记
本文将在长期内保持更新和修订。但遗憾的是,在FB发布后,作者无权更改,因此后续更新将发布在博客上。
如果地方错误,请通过[email protected]与我联系。
IT外包
>
400-635-8089
立即
咨询
电话咨询
服务热线
400-635-8089
微信咨询
微信咨询
微信咨询
公众号
公众号
公众号
返回顶部