敏感数据保护
发布者:admin 发表于:435天前 阅读数:465 评论:0

敏感数据保护

1.【必须】敏感信息访问

禁止将敏感信息硬编码在程序中,既可能会将敏感信息暴露给攻击者,也会增加代码管理和维护的难度

使用配置中心系统统一托管密钥等敏感信息

2.【必须】敏感数据输出

只输出必要的最小数据集,避免多余字段暴露引起敏感信息泄露

不能在日志保存密码(包括明文密码和密文密码)、密钥和其它敏感信息

对于必须输出的敏感信息,必须进行合理脱敏展示

// bad
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)
}

// good
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)
}

避免通过GET方法、代码注释、自动填充、缓存等方式泄露敏感信息

3.【必须】敏感数据存储

敏感数据应使用SHA2、RSA等算法进行加密存储

敏感数据应使用独立的存储层,并在访问层开启访问控制

包含敏感信息的临时文件或缓存一旦不再需要应立刻删除

4.【必须】异常处理和日志记录

应合理使用panic、recover、defer处理系统异常,避免出错信息输出到前端

defer func () {
        if r := recover(); r != nil {
            fmt.Println("Recovered in start()")
        }
    }()

对外环境禁止开启debug模式,或将程序运行日志输出到前端

错误例子:

dlv --listen=:2345 --headless=true --api-version=2 debug test.go

正确例子:

dlv debug test.go