Position actuelle: Accueil> Derniers articles> Créer un outil de détection d'intégrité de fichiers simple

Créer un outil de détection d'intégrité de fichiers simple

M66 2025-06-06

Dans le développement et l'exploitation et la maintenance quotidiens du site Web, l'intégrité des fichiers est une partie importante de la sécurité du système. Une fois qu'un fichier est falsifié, cela peut signifier que le système a été attaqué ou violé des données. Pour faire face à cette situation, nous pouvons utiliser la fonction MD5_FILE () intégrée de PHP pour créer un outil de détection d'intégrité de fichiers simple et pratique.

1. Quelle est la fonction MD5_FILE?

MD5_FILE () est une fonction fournie par PHP pour calculer directement la valeur de hachage MD5 d'un fichier spécifié. La syntaxe de base est la suivante:

 md5_file(string $filename, bool $binary = false): string|false
  • $ nom de fichier : le chemin du fichier à calculer.

  • $ binaire : s'il faut retourner le hachage au format binaire d'origine (la valeur par défaut est fausse , renvoyant une chaîne hexadécimale 32 bits).

Exemple:

 $hash = md5_file('example.txt');
echo $hash;

2. Idées de conception d'outils

Nous avons conçu l'outil en deux étapes:

  1. Générer le code de vérification de référence (ligne de base) : enregistrez les valeurs MD5 de tous les fichiers à surveiller et enregistrez-les dans un fichier JSON.

  2. Détection périodique : recalculez la valeur MD5 du fichier actuel, comparez-le avec le fichier de base et déterminez s'il a été modifié, supprimé ou ajouté.

3. Étapes de mise en œuvre

1. Analyser le répertoire et générer le fichier de base

 function generateBaseline($dir, $baselineFile = 'baseline.json') {
    $files = new RecursiveIteratorIterator(new RecursiveDirectoryIterator($dir));
    $hashes = [];

    foreach ($files as $file) {
        if ($file->isFile()) {
            $path = str_replace('\\', '/', $file->getRealPath());
            $hashes[$path] = md5_file($path);
        }
    }

    file_put_contents($baselineFile, json_encode($hashes, JSON_PRETTY_PRINT));
    echo "Le fichier de base a été généré: {$baselineFile}\n";
}

// Exemple d'utilisation
generateBaseline(__DIR__ . '/files');

Cette fonction scanne récursivement tous les fichiers dans le répertoire des fichiers et écrit le chemin complet de chaque fichier et sa valeur MD5 sur Baseline.json .

2. Détecter les modifications du fichier

 function checkIntegrity($dir, $baselineFile = 'baseline.json') {
    if (!file_exists($baselineFile)) {
        echo "Fichier de référence introuvable,Veuillez être une base de référence。\n";
        return;
    }

    $baseline = json_decode(file_get_contents($baselineFile), true);
    $current = [];

    $files = new RecursiveIteratorIterator(new RecursiveDirectoryIterator($dir));
    foreach ($files as $file) {
        if ($file->isFile()) {
            $path = str_replace('\\', '/', $file->getRealPath());
            $current[$path] = md5_file($path);
        }
    }

    // Détecter les fichiers qui ont été modifiés ou supprimés
    foreach ($baseline as $path => $hash) {
        if (!isset($current[$path])) {
            echo "[supprimer] {$path}\n";
        } elseif ($current[$path] !== $hash) {
            echo "[Réviser] {$path}\n";
        }
    }

    // Détecter de nouveaux fichiers
    foreach ($current as $path => $hash) {
        if (!isset($baseline[$path])) {
            echo "[Nouveau] {$path}\n";
        }
    }
}

// Exemple d'utilisation
checkIntegrity(__DIR__ . '/files');

Ce script de détection compare les hachages anciens et nouveaux et sortira chaque chemin de fichier qui a été modifié, ajouté ou supprimé, afin que les développeurs puissent prendre des mesures opportunes.

4. Visualisation ou rapport à distance (facultatif)

Les résultats des tests peuvent être affichés par e-mail, fichiers journaux ou pages Web. Par exemple:

 file_put_contents('integrity_report.log', $report);
header('Location: https://m66.net/report-viewer');

Le code ci-dessus redirige le rapport de détection vers le fichier journal, puis le redirige vers une page de visionneuse de rapport, telles que https://m66.net/report-viewer .

5. Résumé

Grâce à la fonction md5_file () , nous pouvons créer un outil de détection d'intégrité de fichiers efficace avec très peu de code. Bien qu'il ne puisse pas remplacer les outils de protection de la sécurité professionnels, il suffit pour que les sites Web de petites et moyennes fassent face aux risques de falsification courants. Dans le déploiement réel, il est recommandé d'exécuter régulièrement le script en tant que tâche CRON et d'améliorer encore la sécurité en combinaison avec des mécanismes de notification (tels que les robots e-mail ou Dingtalk).