Position actuelle: Accueil> Derniers articles> Comment empêcher les attaques de traversée de chemin lors du chargement des images GD2

Comment empêcher les attaques de traversée de chemin lors du chargement des images GD2

M66 2025-05-18

Lors du chargement des images GD2 à l'aide de la fonction ImageCreateFromGD2 de PHP, si le chemin d'entrée n'est pas traité correctement, vous pouvez rencontrer une attaque de traversée de chemin. Un attaquant peut accéder à des fichiers sensibles sur le serveur en construisant des chemins spécifiques. Par conséquent, il est très important d'empêcher correctement les attaques de traversée de chemin. Cet article expliquera comment empêcher efficacement de telles attaques.

1. Qu'est-ce qu'une attaque de traversée de chemin?

Une attaque de traversée de chemin fait référence à un attaquant essayant de contourner le contrôle de sécurité du système de fichiers en construisant des chemins contenant ../Or des méthodes similaires et en accédant à des fichiers qui ne doivent pas être exposés. En PHP, si la fonction ImageCreateFromgd2 charge une image sans le chemin de vérification correct, cela peut entraîner la fuite d'informations sensibles sur le chargement du serveur.

2. Chargez l'image à l'aide de la fonction ImageCreatefromgd2

La fonction ImageCreateFromgd2 est une fonction fournie par PHP pour créer des ressources d'image à partir de fichiers d'image au format GD2. La méthode d'utilisation de base est la suivante:

 $image = imagecreatefromgd2($filename);

Cette fonction prend un paramètre de chemin de fichier $ nom de fichier et renvoie une ressource d'image. False est généralement renvoyé si le chemin est incorrect ou si le fichier est inaccessible.

3. Risque d'attaques de traversée de chemin

Les attaquants peuvent contourner les restrictions de sécurité en modifiant les chemins de fichier, tels que:

 $image = imagecreatefromgd2('/var/www/html/uploads/../../etc/passwd');

Dans l'exemple ci-dessus, l'attaquant tente d'accéder au fichier / etc / passwd sur le serveur via la partie ../ du chemin, qui fuit des informations sensibles.

4. Comment empêcher les attaques de traversée de chemin?

Afin d'éviter les attaques de traversée de trajet, les chemins entrés par l'utilisateur doivent être strictement vérifiés et filtrés. Voici plusieurs mesures préventives efficaces:

4.1 Vérifiez le chemin du fichier

Tout d'abord, assurez-vous que le chemin du fichier est digne de confiance. Vous pouvez utiliser la fonction RealPath () de PHP pour convertir les chemins relatifs en chemins absolus et vérifier qu'ils sont dans le répertoire attendu. La fonction realPath () renvoie le chemin absolu normalisé et analyse tous les liens symboliques.

 $filename = '/var/www/html/uploads/' . $_GET['filename']; // Obtenez le chemin du fichier saisi par l'utilisateur
$realpath = realpath($filename);

if ($realpath && strpos($realpath, '/var/www/html/uploads/') === 0) {
    // Le chemin est valide,Et dans le répertoire autorisé
    $image = imagecreatefromgd2($realpath);
} else {
    // Chemin non valide,Rejeter le chargement
    echo "Invalid file path!";
}

Dans le code ci-dessus, nous utilisons d'abord la fonction realPath () pour obtenir le chemin absolu du fichier, puis vérifions s'il est situé dans le répertoire / var / www / html / uploads / . Sinon, nous refusons de charger le fichier.

4.2 Vérifiez les noms de fichiers à l'aide de la liste blanche

Les noms de fichiers qui peuvent être téléchargés et chargés peuvent être limités à une liste blanche. Cela empêchera les fichiers malveillants d'être téléchargés et chargés.

 $allowed_files = ['image1.gd2', 'image2.gd2']; // Liste blanche
$filename = $_GET['filename'];

if (in_array($filename, $allowed_files)) {
    $image = imagecreatefromgd2('/var/www/html/uploads/' . $filename);
} else {
    echo "File not allowed!";
}

4.3 Empêcher les attaques de liens symboliques

Symlinks peut être utilisé pour effectuer des attaques de traversée de chemin. Vous pouvez vous assurer que le chemin du fichier est physiquement présent et ne contient pas de liens symboliques en utilisant RealPath () . Cela empêche l'accès aux fichiers qui ne devraient pas être accessibles via des liens symboliques.

 $filename = '/var/www/html/uploads/' . $_GET['filename'];
$realpath = realpath($filename);

if ($realpath && strpos($realpath, '/var/www/html/uploads/') === 0 && !is_link($realpath)) {
    // Le chemin est valide,Et pas de liens symboliques
    $image = imagecreatefromgd2($realpath);
} else {
    echo "Invalid file path or symbolic link detected!";
}

5. Résumé

La prévention des attaques de traversée de chemin est critique lors du chargement des images GD2 en utilisant la fonction ImageCreateFromGD2 de PHP. Le risque de ces attaques peut être réduit efficacement en vérifiant les chemins de fichier, en utilisant les listes blanches, en vérifiant les liens symboliques, etc. Soyez toujours alerte pour assurer la sécurité du serveur et éviter les violations de données sensibles ou les attaques de serveur en raison de vulnérabilités de traversée de chemin.