Hello! 欢迎来到小浪云!


Golang日志中敏感信息如何脱敏处理


avatar
小浪云 2025-03-19 28

Golang日志中敏感信息如何脱敏处理

保障golang应用日志安全,避免敏感信息泄露至关重要。本文介绍几种常见的Golang日志脱敏方法:

方法一:正则表达式替换

利用正则表达式匹配并替换敏感信息,例如邮箱和密码。

package main  import (     "fmt"     "log"     "regexp" )  func main() {     logMessage := "用户使用邮箱 user@example.com 和密码 123456 登录"      // 定义敏感信息正则表达式     emailRegex := regexp.MustCompile(`[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+.[a-zA-Z]{2,}`)     passwordRegex := regexp.MustCompile(`d{6}`)      // 替换敏感信息     maskedMessage := emailRegex.ReplaceAllString(logMessage, "****@****")     maskedMessage = passwordRegex.ReplaceAllString(maskedMessage, "******")      log.Println(maskedMessage) }

方法二:第三方库辅助

立即学习go语言免费学习笔记(深入)”;

一些日志库如logrus和zap提供更便捷的脱敏功能。

使用logrus:

package main  import (     "github.com/sirupsen/logrus"     "regexp" )  func main() {     logrus.SetFormatter(&logrus.TextFormatter{         DisableColors: true,         FullTimestamp: true,     })      logMessage := "用户使用邮箱 user@example.com 和密码 123456 登录"      // 定义敏感信息正则表达式     emailRegex := regexp.MustCompile(`[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+.[a-zA-Z]{2,}`)     passwordRegex := regexp.MustCompile(`d{6}`)      // 替换敏感信息     maskedMessage := emailRegex.ReplaceAllString(logMessage, "****@****")     maskedMessage = passwordRegex.ReplaceAllString(maskedMessage, "******")      logrus.Info(maskedMessage) }

使用zap:

package main  import (     "go.uber.org/zap"     "go.uber.org/zap/zapcore"     "regexp" )  func main() {     logger, _ := zap.NewProduction()     defer logger.Sync()      logMessage := "用户使用邮箱 user@example.com 和密码 123456 登录"      // 定义敏感信息正则表达式     emailRegex := regexp.MustCompile(`[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+.[a-zA-Z]{2,}`)     passwordRegex := regexp.MustCompile(`d{6}`)      // 替换敏感信息     maskedMessage := emailRegex.ReplaceAllString(logMessage, "****@****")     maskedMessage = passwordRegex.ReplaceAllString(maskedMessage, "******")      logger.Info(maskedMessage) }

方法三:自定义日志格式化器

创建自定义格式化器,在日志输出前处理敏感信息。

package main  import (     "log"     "regexp"     "time" )  type CustomFormatter struct {     logger *log.Logger }  func NewCustomFormatter(logger *log.Logger) *CustomFormatter {     return &CustomFormatter{logger: logger} }  func (f *CustomFormatter) Format(entry *log.LogRecord) ([]byte, error) {     logMessage := entry.Message     emailRegex := regexp.MustCompile(`[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+.[a-zA-Z]{2,}`)     passwordRegex := regexp.MustCompile(`d{6}`)      maskedMessage := emailRegex.ReplaceAllString(logMessage, "****@****")     maskedMessage = passwordRegex.ReplaceAllString(maskedMessage, "******")      return []byte(time.Now().Format(time.RFC3339) + " " + maskedMessage + "n"), nil }  func main() {     logger := log.New(log.Writer(), "", log.LstdFlags)     customFormatter := NewCustomFormatter(logger)     logger.SetOutput(customFormatter)      logMessage := "用户使用邮箱 user@example.com 和密码 123456 登录"     logger.Println(logMessage) }

选择最适合项目需求的方法,有效保护敏感信息。 记住根据实际情况调整正则表达式以匹配不同的敏感信息类型。

相关阅读