當前位置: 首頁> 最新文章列表> 如何用md5_file() 檢測PHP 項目的配置文件有沒有被人偷偷改動?

如何用md5_file() 檢測PHP 項目的配置文件有沒有被人偷偷改動?

M66 2025-06-23

在開發PHP 項目時,配置文件通常存放著數據庫連接信息、API 密鑰等重要數據。一旦配置文件被未經授權的人員篡改,可能導致安全隱患、數據洩露或程序異常。因此,及時檢測配置文件是否被篡改變得尤為重要。

本文將介紹如何利用PHP 內置函數md5_file()來檢測配置文件的完整性,從而判斷是否被偷偷改動。

md5_file() 簡介

md5_file()是PHP 提供的一個函數,用於計算指定文件的MD5 散列值(hash)。 MD5 是一種廣泛使用的哈希函數,其輸出是一個32 字符的十六進製字符串。

利用文件的MD5 值,我們可以對比之前保存的MD5 與當前文件的MD5 是否一致,進而判斷文件是否被修改。

檢測配置文件修改的基本思路

  1. 初始化階段:在配置文件正常且安全的情況下,先計算配置文件的MD5 值並保存,比如寫入一個專門的文件或數據庫。

  2. 檢測階段:每次程序運行時,重新計算配置文件的MD5 值,與之前保存的值比較。

  3. 結果判斷

    • 如果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 值,並保存。

  • 這個示例中直接硬編碼了$knownMd5 ,實際項目中建議寫入安全存儲(如數據庫或安全文件)中。

  • 如果配置文件路徑發生變化,需要同步修改代碼中的路徑。

如何獲取初始的MD5 值?

可以寫一段臨時腳本,運行一次獲取配置文件的MD5 值:

 <?php
echo md5_file(__DIR__ . '/config.php');
?>

將輸出的字符串保存,作為後續對比的標準。

拓展思路

  • 定時檢測:利用計劃任務(如Linux 的crontab)定期運行檢測腳本,及時發現篡改。

  • 結合日誌:發現文件被修改後,將相關信息(時間、IP 等)記錄下來,方便排查。

  • 多文件檢測:如果項目有多個重要配置文件,可以用數組批量保存它們的MD5 值,循環檢測。

參考鏈接