Maison >développement back-end >tutoriel php >Comment les développeurs PHP peuvent-ils prévenir efficacement les vulnérabilités de traversée de répertoires ?
Atténuation des vulnérabilités de traversée de répertoires en PHP : préserver les chemins en toute sécurité
Empêcher l'accès non autorisé aux répertoires sensibles est crucial dans le développement PHP. Les vulnérabilités de traversée de répertoires constituent une menace importante, permettant aux attaquants d'exploiter une validation d'entrée inappropriée pour naviguer en dehors des répertoires désignés.
Dans le scénario mentionné, où vous disposez d'un chemin de base "/whatever/foo/" et devez autoriser les chemins par rapport à lui, les chemins absolus comme "..." ou "./.." ne peuvent pas être utilisés comme filtres en raison de leur capacité insuffisante à empêcher les attaques traversantes.
Pour résoudre ce problème, une solution efficace consiste à comparer des chemins réels. Voici comment cela fonctionne :
$basepath = '/foo/bar/baz/'; $realBase = realpath($basepath); $userpath = $basepath . $_GET['path']; $realUserPath = realpath($userpath); if ($realUserPath === false || strpos($realUserPath, $realBase) !== 0) { // Directory Traversal Detected } else { // Valid Path }
La fonction realpath() résout les chemins fournis vers leurs chemins physiques correspondants, en éliminant les liens symboliques, la navigation par « points » et d'autres astuces de manipulation de chemin. En comparant le chemin réel du chemin utilisateur avec le chemin réel du chemin de base, vous pouvez déterminer si un parcours a été tenté. Si le chemin utilisateur réel ne commence pas par le chemin de base réel, une traversée se produit probablement.
Notez que la sortie de realpath() exclut les répertoires virtuels comme "." ou "...". Par conséquent, comparer les chemins réels empêche efficacement les attaquants d’exploiter les vulnérabilités de traversée à l’aide de tels caractères.
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!