有条件地打印包含敏感数据的调试信息

我正在运行一个Go程序作为工作。k8s


应用程序向集群发送 API 请求以创建用户,因此它将包含敏感数据(用户密码)。elasticsearch


    requestDump, err := httputil.DumpRequest(req, true)

    responseDump, err := httputil.DumpResponse(resp, true)

    esapiClient.log.Printf("got response code %d when creating user: %s\n", resp.StatusCode, user.Username)

    if resp.StatusCode != http.StatusOK {

        esapiClient.log.Printf("error: got response code: %d when creating user %s\n", resp.StatusCode, user.Username)

        esapiClient.log.Println("Request\n", string(requestDump))

        esapiClient.log.Println("Response\n", string(responseDump))

        return ErrResponseCode

    }

当事情向南发展时,我希望能够转储请求和响应(特别是在情况下)以检查出了什么问题(主要是潜在的格式错误的请求)。400


推荐的执行此操作方法是什么?日志级别是解决此问题的唯一方法吗?


守着一只汪
浏览 54回答 1
1回答

米脂

日志级别是非解决方案。您的目标应该是不要让 PII(个人身份信息)完全进入日志转储,包括当您在调试模式下启动服务时。根据您执行日志记录的方式,只需在结构上实现相关接口,并省略或密文包含 PII 的字段。如果需要对原始值有一些了解以进行调试的字段,则只能对其进行部分密文。例如,如果使用谓词或类似词登录,则可以实现该接口:fmtStringertype User struct {    Name     string    Password string}func (u User) String() string {    return fmt.Sprintf("{%s %s}", u.Name, "*****")}func main() {    u := User{"pkaramol", "secret"}    fmt.Println(u) // {pkaramol *****}    }如果您登录 JSON,请实施以进行密文,或使用结构标记省略:MarshalJSONjson:"-"func (u User) MarshalJSON() ([]byte, error) {    return json.Marshal(map[string]interface{}{        "name": u.Name,        "password": "*****",    })}func main() {    u := User{"pkaramol", "secret"}    b, _ := json.Marshal()    fmt.Println(string(b)) // {"name":"pkaramol","password":"*****"}}
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go