PHPプロジェクトを開発する場合、構成ファイルは通常、データベース接続情報、APIキーなどの重要なデータを保存します。構成ファイルが不正な担当者によって改ざんされると、セキュリティリスク、データ侵害、またはプログラムの異常につながる可能性があります。したがって、構成ファイルが改ざんされているかどうかを迅速に検出することが特に重要です。
この記事では、PHPビルトイン関数md5_file()を使用して、密かに変更されたかどうかを判断するために、構成ファイルの整合性を検出する方法を紹介します。
MD5_FILE()は、指定されたファイルのMD5ハッシュ値(ハッシュ)を計算するためにPHPによって提供される関数です。 MD5は、出力が32文字の16進数文字列である広く使用されているハッシュ関数です。
ファイルのMD5値を使用して、以前に保存したMD5が現在のファイルMD5と一致しているかどうかを比較し、ファイルが変更されたかどうかを判断できます。
初期化フェーズ:構成ファイルが正常で安全な場合、最初に構成ファイルのMD5値を計算し、特別なファイルやデータベースに書き込むなど、保存します。
検出フェーズ:プログラムが実行されるたびに、構成ファイルのMD5値を再計算し、以前に保存した値と比較します。
結果の判断:
MD5が一貫している場合、構成ファイルは変更されていません。
MD5が一貫していない場合、構成ファイルが改ざんされ、アラームが必要であるか、対応する処理が必要であることを意味します。
構成ファイルパスがconfig.phpであると仮定すると、次のコードを使用して検出を実装できます。
<?php
// 構成ファイルパス
$configFile = __DIR__ . '/config.php';
// 既知のセキュリティプロファイルを保存しますMD5価値(実際、データベースまたはファイルから読むことができます)
$knownMd5 = 'e99a18c428cb38d5f260853678922e03'; // 示例価値,请替换为实际価値
// 現在の構成ファイルを計算しますMD5
$currentMd5 = md5_file($configFile);
if ($currentMd5 === false) {
echo "構成ファイルを読み取れません!";
exit;
}
// 対比MD5価値
if ($currentMd5 === $knownMd5) {
echo "構成ファイルは変更されていません,MD5検証が合格しました。";
} else {
echo "警告!構成ファイルが変更されました,MD5検証に失敗しました!";
// ここにログを書くことができます,メールまたはその他のアラームを送信します
}
?>
プロジェクトを展開するときに最初にMD5_FILE()を実行し、最初のMD5値を取得して保存できます。
この例では、 $ nownedMd5は直接ハードコードされており、実際のプロジェクトで安全なストレージ(データベースや安全なファイルなど)に書き込むことをお勧めします。
構成ファイルパスが変更された場合、コードのパスを同期する必要があります。
一時的なスクリプトを書き、それを1回実行して、構成ファイルのMD5値を取得できます。
<?php
echo md5_file(__DIR__ . '/config.php');
?>
その後の比較のための標準として出力文字列を保存します。
時限検出:スケジュールされたタスク(Linux Crontabなど)を使用して、定期的に検出スクリプトを実行して、タイムリーに改ざんを検出します。
ログと組み合わせると、ファイルが変更されたことを発見した後、簡単な調査のために関連情報(時間、IPなど)を記録します。
マルチファイル検出:プロジェクトに複数の重要な構成ファイルがある場合、配列とループ検出のバッチに保存できます。
PHP公式文書: MD5_FILE()