linux

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

小樊
62
2025-03-19 08:38:15
栏目: 编程语言

在Golang中,对日志中的敏感信息进行脱敏处理是非常重要的。以下是一些常见的方法来实现这一目标:

1. 使用正则表达式替换

你可以使用正则表达式来匹配敏感信息并进行替换。

package main

import (
	"fmt"
	"log"
	"regexp"
)

func main() {
	logMessage := "User logged in with email: user@example.com and password: 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)
}

2. 使用第三方库

有一些第三方库可以帮助你更方便地进行日志脱敏处理,例如 logruszap

使用 logrus

package main

import (
	"github.com/sirupsen/logrus"
	"regexp"
)

func main() {
	logrus.SetFormatter(&logrus.TextFormatter{
		DisableColors: true,
		FullTimestamp: true,
	})

	logMessage := "User logged in with email: user@example.com and password: 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 logged in with email: user@example.com and password: 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)
}

3. 自定义日志格式化器

你可以自定义日志格式化器来处理敏感信息。

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 logged in with email: user@example.com and password: 123456"
	logger.Println(logMessage)
}

通过这些方法,你可以在Golang中对日志中的敏感信息进行有效的脱敏处理。选择适合你项目需求的方法即可。

0
看了该问题的人还看了