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.
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.
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.
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.
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:
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.
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!";
}
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!";
}
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.