當前位置: 首頁> 最新文章列表> 替換日誌文件中敏感信息(如IP 地址、token)

替換日誌文件中敏感信息(如IP 地址、token)

M66 2025-06-02

在處理日誌文件時,我們經常會遇到需要對敏感信息進行脫敏的情況,比如用戶的IP 地址、身份驗證token 等。這些信息如果未經處理就直接存儲或輸出,可能會引起隱私和安全問題。

PHP 提供了多種字符串處理函數,而其中mb_eregi_replace是一個多字節安全的函數,它支持正則表達式替換,同時支持Unicode 字符集,特別適用於包含中文等多字節字符的內容處理。

本文將介紹如何使用mb_eregi_replace來查找和替換日誌內容中的IP 地址和token 字符串。

示例日誌內容

假設我們有以下日誌片段:

 [2025-05-27 10:00:00] User login from 192.168.1.100 with token abc123xyz
[2025-05-27 10:05:00] Failed login from 10.0.0.5 with token 9f8d7e6c5b

我們希望將其中的IP 地址和token 替換為[REDACTED_IP][REDACTED_TOKEN]

使用mb_eregi_replace 進行替換

PHP 的mb_eregi_replace函數使用方式如下:

 string mb_eregi_replace ( string $pattern , string $replace , string $string [, string $option = "msr" ] )

下面是一個完整的示例腳本,用來處理日誌內容:

 <?php

// 模擬讀取日誌內容
$log = <<<LOG
[2025-05-27 10:00:00] User login from 192.168.1.100 with token abc123xyz
[2025-05-27 10:05:00] Failed login from 10.0.0.5 with token 9f8d7e6c5b
LOG;

// 正則匹配 IPv4 地址
$pattern_ip = '\b\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}\b';

// 正則匹配 token(假設為由字母和數字組成的長度 8 到 32)
$pattern_token = '\b[a-zA-Z0-9]{8,32}\b';

// 替換 IP 地址
$log = mb_eregi_replace($pattern_ip, '[REDACTED_IP]', $log);

// 替換 token,注意避免誤傷時間戳中的數字
$log = mb_eregi_replace('with token ' . $pattern_token, 'with token [REDACTED_TOKEN]', $log);

// 輸出結果
echo nl2br(htmlspecialchars($log));

?>

輸出結果

輸出將如下所示:

 [2025-05-27 10:00:00] User login from [REDACTED_IP] with token [REDACTED_TOKEN]
[2025-05-27 10:05:00] Failed login from [REDACTED_IP] with token [REDACTED_TOKEN]

實際應用建議

在實際項目中,我們通常不會直接對原始日誌文件進行操作,而是通過日誌讀取和轉儲流程中對內容做處理。比如你可以將上述邏輯封裝為一個函數,然後用於日誌展示頁面:

 function sanitize_log($logContent) {
    $pattern_ip = '\b\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}\b';
    $pattern_token = '\b[a-zA-Z0-9]{8,32}\b';

    $logContent = mb_eregi_replace($pattern_ip, '[REDACTED_IP]', $logContent);
    $logContent = mb_eregi_replace('with token ' . $pattern_token, 'with token [REDACTED_TOKEN]', $logContent);

    return $logContent;
}

// 舉例調用
$rawLog = file_get_contents("https://m66.net/logs/example.log");
echo nl2br(htmlspecialchars(sanitize_log($rawLog)));

總結

mb_eregi_replace提供了一種簡潔而高效的方式來處理含有敏感信息的日誌內容。通過合理的正則表達式匹配,可以靈活替換IP、token 等關鍵數據,保護用戶隱私,並確保日誌對開發和運維依然有用。

使用時要注意:

  • 保證替換模式不會誤傷其他合法數據。

  • 注意mb_eregi_replace是大小寫不敏感的,如需區分大小寫可使用mb_ereg_replace

  • PHP 8.0 之後該函數可能不再推薦使用,建議使用PCRE 系列函數配合preg_replace ,但在簡單腳本中它依然方便實用。