Le but de l'option safe_mode de PHP est de résoudre certains des problèmes décrits dans ce chapitre. Cependant, il est architecturalement incorrect de résoudre ce type de problème au niveau PHP, comme indiqué dans le manuel PHP (http://www.php.cn/).
Lorsque le mode sans échec est en vigueur, PHP vérifiera le propriétaire du fichier lu (ou exploité) par le script en cours d'exécution pour s'assurer qu'il est le même que le propriétaire du script. Bien que cela protège contre de nombreux exemples de ce chapitre, cela n'affecte pas les programmes écrits dans d'autres langages. Par exemple, utilisez un script CGI écrit en Bash : >
L'analyseur Bash se soucie-t-il ou même vérifie-t-il la chaîne de configuration dans le fichier de configuration PHP pour activer le mode sans échec ? Bien sûr que non. De même, les autres langages pris en charge par le serveur, comme Perl, Python, etc., ne s'en soucieront pas. Tous les exemples de ce chapitre peuvent être facilement adaptés à d’autres langages de programmation.
#!/bin/bash echo "Content-Type: text/plain" echo "" cat /home/victim/inc/db.inc
Un autre problème typique est que le mode sans échec ne refuse pas l'accès aux fichiers appartenant au serveur WEB. En effet, un script peut être utilisé pour créer un autre script, et le nouveau script appartient au serveur WEB, il peut donc accéder à tous les fichiers appartenant au serveur WEB :
Le script ci-dessus crée le fichier suivant :
<?php $filename = 'file.php'; $script = '<?php header(\'Content-Type: text/plain\'); readfile($_GET[\'file\']); ?>'; file_put_contents($filename, $script); ?>
Puisque le fichier a été créé par le serveur Web, son propriétaire est le serveur Web (Apache est généralement exécuté en tant qu'utilisateur personne) :
<?php header('Content-Type: text/plain'); readfile($_GET['file']); ?>
Par conséquent, ce script peut contourner de nombreuses mesures de sécurité fournies par le mode sans échec. Même si le mode sans échec est activé, un attaquant peut toujours afficher certaines informations telles que les informations de session enregistrées dans le répertoire /tmp car ces fichiers appartiennent au serveur Web (personne).
$ ls file.php -rw-r--r-- 1 nobody nobody 72 May 21 12:34 file.php
Le mode sans échec de PHP joue un certain rôle et peut être considéré comme un mécanisme de défense en profondeur. Cependant, il n'offre qu'une protection médiocre et aucune autre mesure de sécurité n'est proposée dans ce chapitre pour le remplacer.
Ce qui précède est le contenu du mode de sécurité PHP. Pour plus de contenu connexe, veuillez faire attention au site Web PHP chinois (www.php). .cn) !