content_moderation_redact.go 1.4 KB

12345678910111213141516171819202122232425262728293031323334353637
  1. package service
  2. import (
  3. "regexp"
  4. "strings"
  5. )
  6. var contentModerationSecretPatterns = []*regexp.Regexp{
  7. regexp.MustCompile(`(?i)\bhttps?://[^\s"'<>,。;、]+`),
  8. regexp.MustCompile(`(?i)\b((?:api[_-]?key|apikey|access[_-]?token|refresh[_-]?token|id[_-]?token|session[_-]?token|token|session|cookie|set[_-]?cookie|authorization|bearer|password|passwd|pwd|secret|client[_-]?secret|private[_-]?key)\s*[:=]\s*)(["']?)[^"'\s,;,。;、]{6,}`),
  9. regexp.MustCompile(`(?i)\b(Bearer\s+)[A-Za-z0-9._~+/=-]{12,}`),
  10. regexp.MustCompile(`\beyJ[A-Za-z0-9_-]{8,}\.[A-Za-z0-9_-]{8,}\.[A-Za-z0-9_-]{8,}\b`),
  11. regexp.MustCompile(`(?i)\b(?:sk|sk-proj|sk-ant|sess|rk|pk|ak|api|key|token|secret)[_-][A-Za-z0-9._~+/=-]{12,}\b`),
  12. regexp.MustCompile(`\b[0-9a-fA-F]{32,}\b`),
  13. regexp.MustCompile(`\b[A-Za-z0-9_-]{48,}\b`),
  14. regexp.MustCompile(`\b[A-Za-z0-9+/]{48,}={0,2}\b`),
  15. regexp.MustCompile(`\b[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}\b`),
  16. }
  17. func redactContentModerationSecrets(text string) string {
  18. text = strings.TrimSpace(text)
  19. if text == "" {
  20. return ""
  21. }
  22. out := text
  23. for idx, pattern := range contentModerationSecretPatterns {
  24. switch idx {
  25. case 1:
  26. out = pattern.ReplaceAllString(out, `${1}${2}[已脱敏]`)
  27. case 2:
  28. out = pattern.ReplaceAllString(out, `${1}[已脱敏]`)
  29. default:
  30. out = pattern.ReplaceAllString(out, `[已脱敏]`)
  31. }
  32. }
  33. return out
  34. }