現在の位置: ホーム> 最新記事一覧> md5_file()を使用して、Webページが改ざんされているかどうかを検出します(キャッシュファイルに適用)

md5_file()を使用して、Webページが改ざんされているかどうかを検出します(キャッシュファイルに適用)

M66 2025-06-05

Web開発では、アクセス速度を向上させるために、動的に生成されたページコンテンツがしばしばキャッシュされます。キャッシュファイルは、データベースクエリとページレンダリングの時間を大幅に短縮し、ユーザーエクスペリエンスを向上させることができます。ただし、キャッシュされたファイルが改ざんされると、異常なページコンテンツやセキュリティリスクさえも引き起こす可能性があります。したがって、キャッシュされたファイルが違法に変更されたかどうかを効果的に検出することが特に重要です。

この記事では、組み込みのPHP関数MD5_FILE()を使用してキャッシュされたファイルの整合性を検証する方法を紹介し、開発者がWebページ上のキャッシュファイルが改ざんされているかどうかを迅速に判断できるようにします。

md5_file()とは

MD5_FILE()は、指定されたファイルのMD5ハッシュ値(ハッシュ値)を計算するPHPの組み込み関数です。このハッシュ値は、ファイルの「指紋」と見なすことができる32ビット文字列に固定されています。ファイルコンテンツが変更される限り、MD5値も変更されるため、ファイルの整合性を確認するのに理想的です。

関数プロトタイプは次のとおりです。

 string md5_file ( string $filename [, bool $binary = false ] )
  • $ filename :計算するファイルパス

  • $ binary :MD5をバイナリ形式で返すかどうか、デフォルトでfalseになり、16進文字列を返します。

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

ページHTMLをファイル( Cache/Page1.htmlなど)にキャッシュし、特定の時点でキャッシュファイルのMD5値を計算し、「基本値」として保存するとします。ユーザーがアクセスするたびに、キャッシュされたファイルのMD5が再計算され、ベンチマーク値と比較されます。

  • 同じことは、キャッシュファイルが変更されておらず、安全に使用できることを意味します。

  • 異なると、キャッシュファイルが改ざんされている、または予期せず変更されていることを意味し、再生または警戒する必要があります。

サンプルコード

次の例は、キャッシュされたファイルの整合性検出にMD5_File()を使用する方法を示しています。

 <?php
// ファイルパスをキャッシュします
$cacheFile = __DIR__ . '/cache/page1.html';

// 保存されたベンチマーク MD5 価値(データベースまたは構成ファイルに保存できます,ここでは、固定された文字列を仮定します)
$knownMd5 = 'e99a18c428cb38d5f260853678922e03'; // 例 MD5

if (!file_exists($cacheFile)) {
    die('キャッシュファイルは存在しません');
}

// 現在のキャッシュファイルを計算します MD5
$currentMd5 = md5_file($cacheFile);

// 改ざんされているかどうかを判断します
if ($currentMd5 === $knownMd5) {
    echo "キャッシュされたファイルは改ざんされていません,コンテンツセキュリティ。";
} else {
    echo "警告:キャッシュされたファイルに改ざんされる場合があります!今すぐ確認してください。";
}
?>

注意すべきこと

  1. 初期基準値の生成<br> キャッシュファイルが最初に生成される場合、その後続の比較のベンチマークとして、そのMD5値を計算し、すぐに保存する必要があります。

  2. キャッシュされたファイルのストレージパス<br> キャッシュされたファイルは安全に配置する必要があり、改ざんのリスクを防ぐために外部から直接変更することはできません。

  3. 定期的な検証<br> タイミングのあるタスク(Cronなど)を背景に設定して、MD5検証を定期的に実行して、タイムリーに例外を検出できます。

  4. ログとアラームの組み合わせ<br> 改ざんが検出されたら、ログを記録し、通知を迅速に対応するために送信する必要があります。

URLリソースの検証

キャッシュファイルにリモートURLコンテンツ(画像、JSスクリプトなど)が含まれている場合、これらのリソースが信頼できるドメイン名から来ることを確認する必要があります。この記事では、URLのドメイン名をM66.NETに置き換えて、悪意のあるドメイン名のインジェクションがコンテンツを改ざんしないようにする必要があります。

例は、キャッシュされたファイルコンテンツのURLドメイン名を置き換える方法を示しています。