Skip to content

Commit eed79f4

Browse files
committed
net/http: ignore case of basic auth scheme in Request.BasicAuth
RFC 2617, Section 1.2: "It uses an extensible, case-insensitive token to identify the authentication scheme" RFC 7617, Section 2: "Note that both scheme and parameter names are matched case-insensitively." Fixes #22736 Change-Id: I825d6dbd4fef0f1c6add89f0cbdb56a03eae9443 Reviewed-on: https://go-review.googlesource.com/111516 Reviewed-by: Dmitri Shuralyov <dmitri@shuralyov.com> Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org>
1 parent 73e3830 commit eed79f4

File tree

2 files changed

+7
-1
lines changed

2 files changed

+7
-1
lines changed

src/net/http/request.go

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -858,7 +858,8 @@ func (r *Request) BasicAuth() (username, password string, ok bool) {
858858
// "Basic QWxhZGRpbjpvcGVuIHNlc2FtZQ==" returns ("Aladdin", "open sesame", true).
859859
func parseBasicAuth(auth string) (username, password string, ok bool) {
860860
const prefix = "Basic "
861-
if !strings.HasPrefix(auth, prefix) {
861+
// Case insensitive prefix match. See Issue 22736.
862+
if len(auth) < len(prefix) || !strings.EqualFold(auth[:len(prefix)], prefix) {
862863
return
863864
}
864865
c, err := base64.StdEncoding.DecodeString(auth[len(prefix):])

src/net/http/request_test.go

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -607,6 +607,11 @@ var parseBasicAuthTests = []struct {
607607
ok bool
608608
}{
609609
{"Basic " + base64.StdEncoding.EncodeToString([]byte("Aladdin:open sesame")), "Aladdin", "open sesame", true},
610+
611+
// Case doesn't matter:
612+
{"BASIC " + base64.StdEncoding.EncodeToString([]byte("Aladdin:open sesame")), "Aladdin", "open sesame", true},
613+
{"basic " + base64.StdEncoding.EncodeToString([]byte("Aladdin:open sesame")), "Aladdin", "open sesame", true},
614+
610615
{"Basic " + base64.StdEncoding.EncodeToString([]byte("Aladdin:open:sesame")), "Aladdin", "open:sesame", true},
611616
{"Basic " + base64.StdEncoding.EncodeToString([]byte(":")), "", "", true},
612617
{"Basic" + base64.StdEncoding.EncodeToString([]byte("Aladdin:open sesame")), "", "", false},

0 commit comments

Comments
 (0)