go net/http:客户端不应在错误消息中包含原始头值,

44u64gxh  于 4个月前  发布在  Go
关注(0)|答案(3)|浏览(69)

你正在使用哪个版本的Go( go version )?

$ go version
go version go1.15.6 darwin/amd64

这个问题在最新版本中是否会重现?

是的

你正在使用什么操作系统和处理器架构( go env )?

go env 输出

$ go env
GO111MODULE=""
GOARCH="amd64"
GOBIN=""
GOCACHE="/Users/elibishop/Library/Caches/go-build"
GOENV="/Users/elibishop/Library/Application Support/go/env"
GOEXE=""
GOFLAGS=""
GOHOSTARCH="amd64"
GOHOSTOS="darwin"
GOINSECURE=""
GOMODCACHE="/Users/elibishop/.gvm/pkgsets/go1.15.6/global/pkg/mod"
GONOPROXY=""
GONOSUMDB=""
GOOS="darwin"
GOPATH="/Users/elibishop/.gvm/pkgsets/go1.15.6/global"
GOPRIVATE=""
GOPROXY="https://proxy.golang.org,direct"
GOROOT="/Users/elibishop/.gvm/gos/go1.15.6"
GOSUMDB="sum.golang.org"
GOTMPDIR=""
GOTOOLDIR="/Users/elibishop/.gvm/gos/go1.15.6/pkg/tool/darwin_amd64"
GCCGO="gccgo"
AR="ar"
CC="clang"
CXX="clang++"
CGO_ENABLED="1"
GOMOD="/Users/elibishop/work/test/goheaderbug/go.mod"
CGO_CFLAGS="-g -O2"
CGO_CPPFLAGS=""
CGO_CXXFLAGS="-g -O2"
CGO_FFLAGS="-g -O2"
CGO_LDFLAGS="-g -O2"
PKG_CONFIG="pkg-config"
GOGCCFLAGS="-fPIC -m64 -pthread -fno-caret-diagnostics -Qunused-arguments -fmessage-length=0 -fdebug-prefix-map=/var/folders/c8/g71crjpd18nc6jkdykcvp_ww0000gn/T/go-build182950335=/tmp/go-build -gno-record-gcc-switches -fno-common"

你做了什么?

package main

import (
	"fmt"
	"net/http"
)

func main() {
	req, _ := http.NewRequest("GET", "http://worldtimeapi.org/api/timezone", nil)
	req.Header.Add("Authorization", "my-secret-key\n")
	_, err := http.DefaultClient.Do(req)
	fmt.Println(err)
}

你期望看到什么?

由于换行符在HTTP头值中不是有效的字符,我希望Go的HTTP客户端返回一个错误,抱怨错误的头。它确实如此,但是...

你看到了什么?

Get "http://worldtimeapi.org/api/timezone": net/http: invalid header field value "my-secret-key\n" for key Authorization
我认为将完整的实际头值包含在这样的错误消息中是非常不理想的,因为将任何I/O错误的消息写入应用程序日志是很常见的。在这个特定的例子中尤其不合适,因为这是特定的 Authorization 头,其值几乎可以保证是敏感信息,但实际上任何头值都可能是敏感的。
这不是一个刻意制造的例子 - 我们的一位客户不小心在他们提供给我们的库的API密钥中包含了换行符后缀,他们非常不满意地看到密钥出现在他们的日志中,因为我们的代码记录了I/O错误。

sd2nnvve

sd2nnvve2#

https://golang.org/cl/355929提到了这个问题:net/http: omit invalid header value from error message

wmvff8tz

wmvff8tz3#

https://golang.org/cl/355930提到了这个问题:net/http2: omit invalid header value from error message

相关问题