Skip to content

Commit c218cf8

Browse files
Potential fix for code scanning alert no. 390: Clear-text logging of sensitive information
Co-authored-by: Copilot Autofix powered by AI <62310815+github-advanced-security[bot]@users.noreply.github.com>
1 parent dc2d6ad commit c218cf8

File tree

1 file changed

+37
-3
lines changed

1 file changed

+37
-3
lines changed

sql/analyzer/analyzer.go

Lines changed: 37 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -303,14 +303,48 @@ func (a *Analyzer) Log(msg string, args ...interface{}) {
303303

304304
func 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+
314348
func 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

Comments
 (0)