保障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) }
選擇最適合項目需求的方法,有效保護敏感信息。 記住根據實際情況調整正則表達式以匹配不同的敏感信息類型。