当前位置: 首页> 最新文章列表> 替换日志文件中敏感信息(如 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,但在简单脚本中它依然方便实用。