以明文形式记录敏感信息¶
ID: go/clear-text-logging
Kind: path-problem
Security severity: 7.5
Severity: error
Precision: high
Tags:
- security
- external/cwe/cwe-312
- external/cwe/cwe-315
- external/cwe/cwe-359
Query suites:
- go-code-scanning.qls
- go-security-extended.qls
- go-security-and-quality.qls
未加密记录的敏感信息可供访问日志的攻击者访问。
建议¶
确保在记录敏感信息之前始终对其进行加密或混淆处理。
通常,仅在必须以明文形式使用敏感信息时才对其进行解密。
请注意,外部进程通常会存储应用程序的标准输出和标准错误流,从而导致记录的敏感信息被存储。
示例¶
以下示例代码以明文形式记录用户凭据(在本例中为密码)
package main
import (
"log"
"net/http"
)
func serve() {
http.HandleFunc("/register", func(w http.ResponseWriter, r *http.Request) {
r.ParseForm()
user := r.Form.Get("user")
pw := r.Form.Get("password")
log.Printf("Registering new user %s with password %s.\n", user, pw)
})
http.ListenAndServe(":80", nil)
}
相反,凭据应加密、混淆或完全省略
package main
import (
"log"
"net/http"
)
func serve1() {
http.HandleFunc("/register", func(w http.ResponseWriter, r *http.Request) {
r.ParseForm()
user := r.Form.Get("user")
pw := r.Form.Get("password")
log.Printf("Registering new user %s.\n", user)
// ...
use(pw)
})
http.ListenAndServe(":80", nil)
}