Maison > développement back-end > tutoriel php > Comment puis-je empêcher les attaques par traversée de répertoire en PHP tout en autorisant les chemins relatifs ?

Comment puis-je empêcher les attaques par traversée de répertoire en PHP tout en autorisant les chemins relatifs ?

Patricia Arquette
Libérer: 2024-12-07 16:13:12
original
931 Les gens l'ont consulté

How Can I Prevent Directory Traversal Attacks in PHP While Allowing Relative Paths?

Empêcher la traversée de répertoire tout en autorisant les chemins en PHP

Lorsque vous travaillez avec des chemins relatifs, il est crucial de vous protéger contre les attaques de traversée de répertoire qui peuvent compromettre les informations système sensibles.

Considérez le scénario dans lequel vous avez un chemin de base de '/whatever/foo/' et devez autoriser les chemins relatifs en utilisant le Variable $_GET['chemin']. Cependant, des acteurs malveillants peuvent tenter d'exploiter ce mécanisme en injectant des séquences de traversée de chemin (comme '..' ou './') pour accéder à des répertoires restreints.

Pour empêcher efficacement la traversée de répertoire tout en autorisant les chemins relatifs, vous pouvez utilisez la technique suivante :

$basepath = '/foo/bar/baz/';
$realBase = realpath($basepath);

$userpath = $basepath . $_GET['path'];
$realUserPath = realpath($userpath);

if ($realUserPath === false || strpos($realUserPath, $realBase) !== 0) {
    // Directory Traversal Attempt Detected
} else {
    // Valid Path
}
Copier après la connexion

Cette méthode exploite la fonction realpath() pour déterminer les chemins physiques absolus des chemins de base et fournis par l'utilisateur. En comparant ces chemins absolus, vous pouvez vérifier que le chemin utilisateur ne traverse pas le chemin de base désigné. Si tel est le cas, realpath() renverra false ou un chemin incorrect, déclenchant la détection d'une tentative de traversée de répertoire.

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!

source:php.cn
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal