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 ?

Comment les développeurs PHP peuvent-ils prévenir efficacement les vulnérabilités de traversée de répertoires ?

Susan Sarandon
Susan Sarandonoriginal
2024-12-05 09:19:10223parcourir

How Can PHP Developers Effectively Prevent Directory Traversal Vulnerabilities?

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn