現在の位置: ホーム> 最新記事一覧> PHPのMD5_FILE()関数を使用して、Webサイトの静的リソースが改ざんされているかどうかを監視および検出する方法は?

PHPのMD5_FILE()関数を使用して、Webサイトの静的リソースが改ざんされているかどうかを監視および検出する方法は?

M66 2025-06-23

ウェブサイトの開発とメンテナンスでは、ウェブサイトのセキュリティとユーザーエクスペリエンスを確保するために、静的リソース(CSS、JavaScriptファイル、写真など)の整合性が重要です。ただし、静的リソースが悪意を持って改ざんされている場合があり、ユーザーは異常なコンテンツをロードし、さらにはセキュリティリスクを引き起こすことさえあります。この記事では、Webサイトの静的リソースが改ざんされているかどうかを迅速に監視および検出するために、PHPの組み込みMD5_FILE()関数を使用する方法を紹介します。

md5_file()機能とは何ですか?

MD5_FILE()は、ファイルのMD5ハッシュ値を計算するPHPの関数です。ファイルパスパラメーターを受け入れ、ファイルのコンテンツの32ビットヘキサデシマル文字列を返します。ファイルのMD5値を比較することにより、ファイルコンテンツが変更されたかどうかをすばやく判断できます。

アプリケーションシナリオ

  • ウェブサイトがオンラインになった後、静的リソースを改ざんすることを定期的にスキャンします。

  • バージョンファイルを比較し、展開ファイルの整合性を確認します。

  • サードパーティライブラリファイルのセキュリティを監視します。

核となるアイデア

  1. 最初に、静的リソースファイルに初期MD5値を計算して保存します。

  2. これらのファイルを定期的に通過し、MD5値を再計算します。

  3. 最新のMD5値を以前に保存した値と比較します。

  4. MD5値が一貫していない場合、ファイルは変更または改ざんされています。

サンプルコード

次の例は、PHPを使用してMD5_FILE()関数を使用して、指定されたディレクトリ内の静的リソースが改ざんされているかどうかを監視する方法を示しています。

 <?php
// 監視ディレクトリ
$directory = __DIR__ . '/static';

// 保存MD5値ファイル(ストレージ形式はです json)
$md5RecordFile = __DIR__ . '/md5_records.json';

// 歴史を読んでくださいMD5記録
$oldMd5Records = file_exists($md5RecordFile) ? json_decode(file_get_contents($md5RecordFile), true) : [];

// ディレクトリ内のすべての静的ファイルを取得します
$files = new RecursiveIteratorIterator(new RecursiveDirectoryIterator($directory));
$changedFiles = [];
$newMd5Records = [];

foreach ($files as $file) {
    if ($file->isFile()) {
        $filePath = $file->getPathname();
        // 現在のファイルを計算しますMD5価値
        $md5 = md5_file($filePath);

        // 記録当前MD5
        $relativePath = str_replace($directory . DIRECTORY_SEPARATOR, '', $filePath);
        $newMd5Records[$relativePath] = $md5;

        // もっと古いMD5新しいとMD5
        if (!isset($oldMd5Records[$relativePath]) || $oldMd5Records[$relativePath] !== $md5) {
            $changedFiles[] = $relativePath;
        }
    }
}

// 出力検出結果
if (count($changedFiles) > 0) {
    echo "次のファイルが変更または追加されました:\n";
    foreach ($changedFiles as $changedFile) {
        echo "- " . $changedFile . "\n";
    }
} else {
    echo "すべてのファイルは変更されていません。\n";
}

// 最新を保存しますMD5記録
file_put_contents($md5RecordFile, json_encode($newMd5Records, JSON_PRETTY_PRINT));
?>

説明:

  • 静的ディレクトリは、静的リソースを保存するディレクトリであり、実際のプロジェクトに従ってパスを調整できます。

  • MD5レコードファイルMD5_RECORDS.JSONは、各ファイルのMD5値を保存するために使用され、その後の比較が容易になります。

  • このスクリプトは、変更または追加されたファイルのリストを出力します。

  • このスクリプトを時限タスク(Linuxの下のCronなど)に設定して、自動監視を実現できます。

さらなる拡張

  1. 自動アラーム<br> ファイルが変更されるように検出されると、管理者に電子メールまたはテキストメッセージで通知して、潜在的なリスクをタイムリーに処理できます。

  2. ホワイトリストの管理<br> 頻繁に変更されるがセキュリティに影響を与えない特定のドキュメントについては、誤ったアラームを避けるためにホワイトリストを作成します。

  3. より強い暗号化ハッシュアルゴリズム<br> セキュリティ要件が高い場合は、 md5_file()の代わりにhash_file( 'sha256'、$ filepath)を使用できます。

  4. バージョン制御システムと組み合わせて<br> GITなどのツールを使用して静的リソースを管理し、 MD5_File()を組み合わせてファイルセキュリティを確保します。

要約します

PHPのMD5_FILE()関数を使用して、Webサイトで静的リソースを監視および検出することは、シンプルで効率的な方法です。開発者は、ファイルがタイムリーに改ざんされているリスクを発見し、Webサイトコンテンツの整合性とセキュリティを確保するのに役立ちます。自動化されたスクリプトとアラームメカニズムに協力して、Webサイトのセキュリティメンテナンスの効率を大幅に改善できます。