Lors du traitement des fichiers journaux, nous rencontrons souvent des situations où des informations sensibles doivent être désensibilisées, telles que l'adresse IP de l'utilisateur, le jeton d'authentification, etc. Ces informations sont stockées ou sorties directement sans traitement, ce qui peut entraîner des problèmes de confidentialité et de sécurité.
PHP fournit une variété de fonctions de traitement des chaînes, et MB_EREGI_REPLACE est une fonction multi-octets qui prend en charge le remplacement de l'expression régulière et prend en charge les jeux de caractères Unicode, qui conviennent particulièrement au traitement de contenu contenant des caractères multi-octets tels que le chinois.
Cet article expliquera comment utiliser MB_ERGI_REPLACE pour trouver et remplacer les adresses IP et les chaînes de jetons dans le contenu du journal.
Supposons que nous ayons l'extrait de journal suivant:
[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
Nous voulons remplacer l'adresse IP et le jeton avec [Redaked_IP] et [RedAdd_token] .
La fonction MB_ERGI_REPLACE de PHP est utilisée comme suit:
string mb_eregi_replace ( string $pattern , string $replace , string $string [, string $option = "msr" ] )
Voici un exemple complet de script pour le traitement du contenu du journal:
<?php
// Simuler le contenu du journal de lecture
$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;
// Match régulier IPv4 adresse
$pattern_ip = '\b\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}\b';
// Match régulier token(Supposons que la longueur se compose de lettres et de chiffres 8 arriver 32)
$pattern_token = '\b[a-zA-Z0-9]{8,32}\b';
// remplacer IP adresse
$log = mb_eregi_replace($pattern_ip, '[REDACTED_IP]', $log);
// remplacer token,Veillez à éviter de blesser accidentellement les chiffres dans l'horodatage
$log = mb_eregi_replace('with token ' . $pattern_token, 'with token [REDACTED_TOKEN]', $log);
// Résultat de sortie
echo nl2br(htmlspecialchars($log));
?>
La sortie ressemblera à ceci:
[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]
Dans les projets réels, nous ne fonctionnons généralement pas directement sur le fichier journal d'origine, mais traitons le contenu via le processus de lecture et de vidage du journal. Par exemple, vous pouvez encapsuler la logique ci-dessus dans une fonction, puis l'utiliser pour la page d'affichage du journal:
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;
}
// Exemple d'appel
$rawLog = file_get_contents("https://m66.net/logs/example.log");
echo nl2br(htmlspecialchars(sanitize_log($rawLog)));
MB_EREGI_REPLACE fournit un moyen concis et efficace de traiter le contenu du journal contenant des informations sensibles. Grâce à une correspondance d'expression régulière raisonnable, vous pouvez remplacer de manière flexible des données clés telles que la propriété intellectuelle et les jetons pour protéger la confidentialité des utilisateurs et vous assurer que les journaux sont toujours utiles pour le développement et le fonctionnement et la maintenance.
Faites attention à l'utilisation:
Assurez-vous que le mode de remplacement n'endommagera pas incorrectement les autres données juridiques.
Notez que MB_EREG_REPLACE est insensible à la casse. Si vous souhaitez être sensible à la casse, vous pouvez utiliser MB_ERG_REPLACE .
Après PHP 8.0, cette fonction peut ne plus être recommandée. Il est recommandé d'utiliser les fonctions de la série PCRE avec preg_replace , mais il est toujours pratique et pratique dans les scripts simples.