set_include_path est une fonction de PHP pour définir les chemins de temps dans le fichier. Il peut modifier l'élément de configuration include_path afin que PHP puisse le trouver à partir de la liste de chemins spécifiée lors de la recherche de fichiers. Cependant, dans le développement réel, une utilisation inappropriée de cette fonction peut entraîner une série de risques de sécurité. Cet article explorera ces risques et comment les empêcher par des stratégies raisonnables.
Dans PHP, la fonction set_include_path est utilisée pour définir le chemin de recherche d'un fichier. Cette fonction permet aux développeurs d'ajouter des chemins personnalisés au Fichier par défaut Inclure le chemin du chemin, ce qui est utile pour les références de fichiers entre plusieurs modules dans les grands projets ou les cadres.
<span><span><span class="hljs-title function_ invoke__">set_include_path</span></span><span>(</span><span><span class="hljs-string">'/var/www/myproject/includes'</span></span><span>);
</span></span>
Cette ligne de code ajoutera le répertoire / var / www / myproject / inclut le chemin du chemin du fichier de recherche PHP. Grâce à ce chemin, PHP pourra charger des fichiers situés dans ce répertoire, par exemple:
<span><span><span class="hljs-keyword">include</span></span><span> </span><span><span class="hljs-string">'myfile.php'</span></span><span>;
</span></span>
Bien que set_include_path offre une grande commodité dans le développement, il peut provoquer de graves vulnérabilités de sécurité si elle n'est pas gérée avec prudence, en particulier pour les attaquants externes.
L'un des risques les plus courants est le détournement de chemin. Lorsque les développeurs utilisent des chemins non sûrs ou transmettent les contenus entrés par les utilisateurs directement sur set_include_path , un attaquant peut utiliser cette fonctionnalité pour charger des fichiers malveillants. En ajoutant des chemins malveillants pour inclure_path , l'attaquant peut contrôler les fichiers de PHP, ce qui fait que l'application exécute le code non autorisé et peut même fuir des informations sensibles ou endommager le système.
Si le code existe comme suit:
<span><span><span class="hljs-variable">$path</span></span><span> = </span><span><span class="hljs-variable">$_GET</span></span><span>[</span><span><span class="hljs-string">'path'</span></span><span>]; </span><span><span class="hljs-comment">// Le chemin entré par l'utilisateur</span></span><span>
</span><span><span class="hljs-title function_ invoke__">set_include_path</span></span><span>(</span><span><span class="hljs-variable">$path</span></span><span>);
</span></span>
Un attaquant peut exécuter du code malveillant en accédant à un exemple similaire.com/script.php?path=/tmp/malicious_code pour ajouter des chemins de fichier malveillants à inclure_path .
Si php utilise set_include_path pour définir un chemin non sûr, un attaquant peut faire charger des fichiers locaux de PHP, voire des fichiers système, et ainsi déclencher une vulnérabilité d'inclusion de fichiers locaux (LFI) en altérant les paramètres de chemin. Cela peut entraîner une fuite d'informations sensibles ou une exécution de code distant.
En modifiant l'inclusion_path , l'attaquant peut contrôler indirectement le chemin de chargement du fichier. Si les autorisations de répertoire ne sont pas correctement contrôlées, d'autres fichiers non liés peuvent être exposés à l'attaquant. Par exemple, certains répertoires peuvent contenir des fichiers de configuration sensibles ou des fichiers journaux qui peuvent provoquer de graves problèmes de sécurité si un attaquant y a accès.
L'une des précautions les plus importantes consiste à ne pas faire confiance directement à la saisie des utilisateurs. Toutes les données passant dans les chemins doivent être strictement vérifiées et filtrées pour assurer la sécurité des chemins. Vous pouvez utiliser des fonctions de nom de base et d'autres méthodes pour éliminer les éléments potentiels de chemin malveillant.
<span><span><span class="hljs-variable">$path</span></span><span> = </span><span><span class="hljs-title function_ invoke__">basename</span></span><span>(</span><span><span class="hljs-variable">$_GET</span></span><span>[</span><span><span class="hljs-string">'path'</span></span><span>]); </span><span><span class="hljs-comment">// Obtenez uniquement la partie du nom de fichier</span></span><span>
</span></span>
Cette méthode garantira que l'utilisateur ne peut pas obtenir de fichiers d'autres répertoires via la traversée de chemin.
À moins que cela ne soit effectivement nécessaire, évitez l'utilisation fréquente de la fonction set_include_path . Si vous pouvez inclure directement des fichiers à travers des chemins absolus ou relatifs, vous n'avez pas besoin de modifier l'inclusion_path . Assurez-vous que l'élément de configuration est modifié uniquement s'il est absolument nécessaire et que les chemins définis sont strictement contrôlés.
Pendant le développement, il est recommandé d'utiliser une structure de répertoire fixe et de définir le chemin à travers les constantes au lieu de coder dur le chemin dans un appel de fonction. De cette façon, vous pouvez mieux contrôler les chemins contenus dans le fichier et éviter les problèmes de détournement de chemin potentiels.
<span><span><span class="hljs-title function_ invoke__">define</span></span><span>(</span><span><span class="hljs-string">'INCLUDE_PATH'</span></span><span>, </span><span><span class="hljs-string">'/var/www/myproject/includes'</span></span><span>);
</span><span><span class="hljs-title function_ invoke__">set_include_path</span></span><span>(INCLUDE_PATH);
</span></span>
Cette méthode peut assurer l'uniformité et la sécurité des chemins et réduire la possibilité d'erreurs de chemin.
Pour éviter de charger des fichiers externes via URL, assurez-vous que l'autoroute_url_include dans la configuration php.ini est défini sur OFF . Si cet élément de configuration est activé, un attaquant peut charger des fichiers de scripts malveillants externes via l'URL.
Les journaux d'accès aux fichiers d'audit et de surveillance en temps opportun sur le serveur, en particulier lors de l'accès à des fichiers sensibles ou des fichiers de configuration. Grâce à l'analyse des journaux, un comportement anormal d'accès aux fichiers peut être trouvé, afin de les prévenir et de les réparer en temps opportun.
Bien que set_include_path soit un outil puissant en PHP, il peut également devenir la source des vulnérabilités de sécurité si elle est mal utilisée. Pour réduire les risques de sécurité potentiels, les développeurs doivent suivre les meilleures pratiques de sécurité, vérifier et filtrer toutes les entrées utilisateur, limiter l'accès au système de fichiers et éviter de modifier l'inclusion_path lorsque cela est possible. Dans le même temps, le renforcement de la surveillance des journaux et de l'audit peut également prévenir efficacement les attaques potentielles.
Ces méthodes vous permettent de profiter des mécanismes de chargement de fichiers flexibles tout en garantissant la sécurité de vos applications PHP.