问题原因
当 golang 程序 panic,或者通过 runtime.Caller(0) 获取当前出错的文件位置作为日志记录时,会暴露程序编译机器上的项目路径、以及账户,不如下面这些信息, 这些信息我们并不想让对方看到。
panic: oh! no!
goroutine 1 [running]:
main.main()
/Users/jerry/go/src/demo/panic_demo/main.go:10 +0x64
问题现象
当我们通过 strings panic_demo | grep /Users 静态分析golang 编译后的二进制就可以得到完整的源码路径信息:
/Users/jerry/go/src/demo/panic_demo/main.go
/Users/jerry/go/src/demo/panic_demo/main.go
/Users/jerry/go/src/demo/panic_demo
这些信息我们可能并不想让对方知道, 所以我们需要对这些信息进行处理, 剔除这些信息。
解决方式
在编译是通过传入以下参数来剔除:
go build -gcflags=-trimpath=${GOPATH}-asmflags=-trimpath=${GOPATH}
更彻底的方式:
go build -gcflags=-trimpath=$GOPATH -asmflags=-trimpath=$GOPATH -ldflags "-w -s"
处理完后显示是这个样子,不带 ${GOPATH}信息也不影响正常的堆栈信息。
panic: oh! no!
goroutine 1 [running]:
main.main()
src/demo/myssl_demo/getcert_demo.go:10 +0x64
博客指出程序获取出错文件位置作日志记录时,会暴露编译机器上的项目路径和账户信息。通过静态分析编译后的二进制可得到完整源码路径。为避免信息泄露,需对这些信息处理,编译时可传入参数剔除,有更彻底的处理方式且不影响正常堆栈信息。

被折叠的 条评论
为什么被折叠?



