ログファイルを処理する場合、ユーザーのIPアドレス、認証トークンなど、機密情報を脱感作する必要がある状況に遭遇することがよくあります。この情報は、プライバシーやセキュリティの問題を引き起こす可能性があるため、処理せずに直接保存または出力されます。
PHPはさまざまな文字列処理機能を提供し、 MB_EREGI_REPLACEは、正規表現置換をサポートし、ユニコード文字セットをサポートするマルチバイトセーフ関数であり、中国などのマルチバイト文字を含むコンテンツ処理に特に適しています。
この記事では、 MB_EREGI_REPLACEを使用して、ログコンテンツのIPアドレスとトークン文字列を見つけて置き換える方法について説明します。
次のログスニペットがあるとします。
[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
[redacted_ip]および[redacted_token]にIPアドレスとトークンを交換します。
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やトークンなどの主要なデータを柔軟に置き換えて、ユーザーのプライバシーを保護し、ログが開発と操作とメンテナンスに依然として役立つことを確認できます。
使用するときに注意してください:
交換モードが他の法的データを誤って損傷しないことを確認してください。
MB_EREG_REPLACEはケース非感受性であることに注意してください。ケースに敏感になりたい場合は、 MB_EREG_REPLACEを使用できます。
PHP 8.0の後、この関数は推奨されなくなる場合があります。 PREG_REPLACEでPCREシリーズ関数を使用することをお勧めしますが、簡単なスクリプトではまだ便利で実用的です。