Golang日志中敏感信息如何脫敏處理

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) }

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

? 版權聲明
THE END
喜歡就支持一下吧
點贊11 分享