@@ -303,14 +303,48 @@ func (a *Analyzer) Log(msg string, args ...interface{}) {
303303
304304func sanitizeArguments (args []interface {}) []interface {} {
305305 for i , arg := range args {
306- // Example sanitization logic: replace sensitive data with placeholder
307- if isSensitive (arg ) {
308- args [i ] = "[REDACTED]"
306+ switch v := arg .(type ) {
307+ case string :
308+ if isSensitiveString (v ) {
309+ args [i ] = "[REDACTED]"
310+ }
311+ case map [string ]interface {}:
312+ args [i ] = sanitizeMap (v )
313+ case []interface {}:
314+ args [i ] = sanitizeArguments (v )
315+ default :
316+ if reflect .TypeOf (arg ).Kind () == reflect .Struct {
317+ args [i ] = "[STRUCT_REDACTED]"
318+ }
309319 }
310320 }
311321 return args
312322}
313323
324+ func sanitizeMap (m map [string ]interface {}) map [string ]interface {} {
325+ for key , value := range m {
326+ if isSensitiveString (key ) || isSensitive (value ) {
327+ m [key ] = "[REDACTED]"
328+ } else if subMap , ok := value .(map [string ]interface {}); ok {
329+ m [key ] = sanitizeMap (subMap )
330+ } else if subSlice , ok := value .([]interface {}); ok {
331+ m [key ] = sanitizeArguments (subSlice )
332+ }
333+ }
334+ return m
335+ }
336+
337+ func isSensitiveString (str string ) bool {
338+ sensitiveKeywords := []string {"password" , "secret" , "token" , "key" }
339+ str = strings .ToLower (str )
340+ for _ , keyword := range sensitiveKeywords {
341+ if strings .Contains (str , keyword ) {
342+ return true
343+ }
344+ }
345+ return false
346+ }
347+
314348func isSensitive (arg interface {}) bool {
315349 // Add logic to identify sensitive data (e.g., passwords)
316350 // This may involve checking types or specific fields
0 commit comments