Maison >développement back-end >tutoriel php >Guide de sécurité PHP : Prévenir les vulnérabilités liées au cheminement et au téléchargement arbitraire de fichiers

Guide de sécurité PHP : Prévenir les vulnérabilités liées au cheminement et au téléchargement arbitraire de fichiers

PHPz
PHPzoriginal
2023-07-01 08:13:371073parcourir

Guide de sécurité PHP : Prévenir les vulnérabilités de traversée de chemin et de téléchargement de fichiers arbitraires

Introduction :
Avec le développement rapide d'Internet, PHP, en tant que langage de développement Web très populaire, a été Il est largement utilisé dans le développement de divers sites Web et applications. Cependant, en raison de la flexibilité et de l’ouverture de PHP, il donne également aux pirates la possibilité d’exploiter des vulnérabilités. Cet article se concentrera sur deux vulnérabilités de sécurité courantes, à savoir la vulnérabilité de traversée de chemin et la vulnérabilité de téléchargement de fichiers arbitraires, et fournira les mesures préventives correspondantes.

1. Vulnérabilité de traversée de chemin
La vulnérabilité de traversée de chemin signifie que l'attaquant modifie les paramètres d'URL pour sortir de la plage de chemin spécifiée et accéder aux fichiers sensibles du système. Voici un exemple de code courant :

$file = $_GET['file'];
include '/path/to/files/' . $file;

Un attaquant peut transmettre le paramètre de fichier sous la forme "../config.php" pour accéder à des fichiers sensibles tels que /config.php. Afin d'éviter les vulnérabilités de traversée de chemin, nous devons prendre les mesures suivantes :

  • Vérification des entrées : effectuer la vérification nécessaire sur les paramètres de nom de fichier saisis par l'utilisateur et autoriser uniquement les fichiers dans un domaine spécifique. format ou dans un nom de plage spécifique. Des expressions régulières ou des listes blanches peuvent être utilisées pour filtrer les entrées des utilisateurs.
$file = $_GET['file'];
if (!preg_match('/^[a-zA-Z0-9]{1,20}.(jpg|png|gif)$/', $file)) {
    die('Invalid file name');
}
  • Vérification du chemin du fichier : avant de référencer le fichier, effectuez une vérification du chemin du fichier pour vous assurer qu'il se trouve dans la plage spécifiée. Vous pouvez utiliser la fonction realpath() pour obtenir le chemin absolu d'un fichier et le comparer à un chemin de base prédéfini.
$file = $_GET['file'];
$basePath = '/path/to/files/';
$fullPath = realpath($basePath . $file);
if ($fullPath === false || strncmp($fullPath, $basePath, strlen($basePath)) !== 0) {
    die('Invalid file path');
}

2. Vulnérabilité de téléchargement de fichiers arbitraire
La vulnérabilité de téléchargement de fichiers arbitraire signifie que l'attaquant utilise la fonction de téléchargement pour télécharger des fichiers malveillants sur le serveur et exécuter le code malveillant, ainsi Prenez le contrôle du serveur ou obtenez des informations sensibles. Voici quelques mesures pour éviter les vulnérabilités de téléchargement arbitraire de fichiers :

  • Vérification du type de fichier : pour les fichiers téléchargés, leur type de fichier doit être vérifié. Vous pouvez utiliser le paramètre $_FILES['file']['type'] pour déterminer le type de fichier et le comparer avec les types de fichiers approuvés. Si vous ne faites pas confiance à la valeur de $_FILES'file', vous pouvez en juger grâce aux informations d'en-tête du fichier.
$fileType = $_FILES['file']['type'];
$allowedTypes = ['image/jpeg', 'image/png', 'image/gif'];
if (!in_array($fileType, $allowedTypes)) {
    die('Invalid file type');
}
  • Vérification de l'extension du fichier : en plus de vérifier le type de fichier, l'extension du fichier doit également être vérifiée. Vous pouvez utiliser la fonction pathinfo() pour obtenir l'extension du fichier et la comparer avec la liste blanche.
$fileName = $_FILES['file']['name'];
$allowedExtensions = ['jpg', 'png', 'gif'];
$fileExtension = pathinfo($fileName, PATHINFO_EXTENSION);
if (!in_array($fileExtension, $allowedExtensions)) {
    die('Invalid file extension');
}
  • Vérification du contenu du fichier : Même si la vérification ci-dessus est réussie, le contenu du fichier doit encore être vérifié davantage. Vous pouvez utiliser la fonction de lecture de fichier pour lire le contenu du fichier et vérifier que le contenu du fichier est conforme à vos attentes.
$filePath = $_FILES['file']['tmp_name'];
$fileContent = file_get_contents($filePath);
if (strpos($fileContent, 'malicious code') !== false) {
    die('Invalid file content');
}

Conclusion :
Les vulnérabilités de traversée de chemin et les vulnérabilités de téléchargement de fichiers arbitraires sont des problèmes de sécurité qui surviennent facilement dans le processus de développement PHP. Ces vulnérabilités peuvent être évitées efficacement grâce à un filtrage et une validation stricts des entrées utilisateur, ainsi qu'à des vérifications des types de fichiers, des extensions et du contenu des fichiers. Dans le même temps, prêter une attention particulière aux annonces officielles de sécurité de PHP et aux derniers correctifs de sécurité, et mettre à jour la version de PHP en temps opportun sont également des mesures importantes pour protéger la sécurité du système.

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