From b7dc6eec613a0406e83baabd517c36e97b1c6813 Mon Sep 17 00:00:00 2001 From: yasss2627 Date: Fri, 16 Jan 2026 22:08:06 +0000 Subject: [PATCH] Ajouter lib/FileValidator.php --- lib/FileValidator.php | 102 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 102 insertions(+) create mode 100644 lib/FileValidator.php diff --git a/lib/FileValidator.php b/lib/FileValidator.php new file mode 100644 index 0000000..ad34a48 --- /dev/null +++ b/lib/FileValidator.php @@ -0,0 +1,102 @@ +maxSize; + } + + // Vérifier les erreurs d'upload + if ($file['error'] !== UPLOAD_ERR_OK) { + return [ + 'valid' => false, + 'error' => 'Erreur lors de l\'upload du fichier' + ]; + } + + // Vérifier la taille minimum + if ($file['size'] < $this->minSize) { + return [ + 'valid' => false, + 'error' => 'Le fichier est vide' + ]; + } + + // Vérifier la taille maximum + if ($file['size'] > $maxSize) { + return [ + 'valid' => false, + 'error' => 'Le fichier dépasse 100 Mo' + ]; + } + + // Vérifier que c'est un fichier uploadé + if (!is_uploaded_file($file['tmp_name'])) { + return [ + 'valid' => false, + 'error' => 'Fichier invalide' + ]; + } + + // Vérifier l'extension + $ext = strtolower(pathinfo($file['name'], PATHINFO_EXTENSION)); + if (!in_array($ext, $this->allowedExts, true)) { + return [ + 'valid' => false, + 'error' => 'Extension non autorisée' + ]; + } + + // Vérifier le MIME type avec finfo + $finfo = finfo_open(FILEINFO_MIME_TYPE); + $mime = finfo_file($finfo, $file['tmp_name']); + finfo_close($finfo); + + if (!in_array($mime, $this->allowedMimes, true)) { + return [ + 'valid' => false, + 'error' => 'Format d\'image invalide' + ]; + } + + // Vérifier que c'est vraiment une image + if (!getimagesize($file['tmp_name'])) { + return [ + 'valid' => false, + 'error' => 'Le fichier n\'est pas une image valide' + ]; + } + + return [ + 'valid' => true, + 'mime' => $mime, + 'ext' => $ext + ]; + } + + /** + * Vérifie qu'un fichier ne contient pas de code dangereux + * Détecte les shells, webshells et code injecté + */ + public function isSafe($filePath) { + if (!is_readable($filePath)) { + return false; + } + + // Vérifier que c'est vraiment une image avec getimagesize + $imageInfo = @getimagesize($filePath); + if (!$imageInfo) { + return false; + } + + // Si getimagesize retourne des infos, c'est une vraie image + return true; + } +} \ No newline at end of file