File tree Expand file tree Collapse file tree 2 files changed +30
-0
lines changed Expand file tree Collapse file tree 2 files changed +30
-0
lines changed Original file line number Diff line number Diff line change @@ -1032,6 +1032,26 @@ func TestServer_Request_Reject_Pseudo_Unknown(t *testing.T) {
10321032 })
10331033}
10341034
1035+ func TestServer_Request_Reject_Authority_Userinfo (t * testing.T ) {
1036+ // "':authority' MUST NOT include the deprecated userinfo subcomponent
1037+ // for "http" or "https" schemed URIs."
1038+ // https://www.rfc-editor.org/rfc/rfc9113.html#section-8.3.1-2.3.8
1039+ testRejectRequest (t , func (st * serverTester ) {
1040+ var buf bytes.Buffer
1041+ enc := hpack .NewEncoder (& buf )
1042+ enc .
WriteField (hpack.
HeaderField {
Name :
":authority" ,
Value :
"[email protected] " })
1043+ enc .WriteField (hpack.HeaderField {Name : ":method" , Value : "GET" })
1044+ enc .WriteField (hpack.HeaderField {Name : ":path" , Value : "/" })
1045+ enc .WriteField (hpack.HeaderField {Name : ":scheme" , Value : "https" })
1046+ st .writeHeaders (HeadersFrameParam {
1047+ StreamID : 1 , // clients send odd numbers
1048+ BlockFragment : buf .Bytes (),
1049+ EndStream : true ,
1050+ EndHeaders : true ,
1051+ })
1052+ })
1053+ }
1054+
10351055func testRejectRequest (t * testing.T , send func (* serverTester )) {
10361056 st := newServerTester (t , func (w http.ResponseWriter , r * http.Request ) {
10371057 t .Error ("server request made it to handler; should've been rejected" )
Original file line number Diff line number Diff line change @@ -432,6 +432,16 @@ func NewServerRequest(rp ServerRequestParam) ServerRequestResult {
432432 }
433433 }
434434 delete (rp .Header , "Trailer" )
435+
436+ // "':authority' MUST NOT include the deprecated userinfo subcomponent
437+ // for "http" or "https" schemed URIs."
438+ // https://www.rfc-editor.org/rfc/rfc9113.html#section-8.3.1-2.3.8
439+ if strings .IndexByte (rp .Authority , '@' ) != - 1 && (rp .Scheme == "http" || rp .Scheme == "https" ) {
440+ return ServerRequestResult {
441+ InvalidReason : "userinfo_in_authority" ,
442+ }
443+ }
444+
435445 var url_ * url.URL
436446 var requestURI string
437447 if rp .Method == "CONNECT" && rp .Protocol == "" {
You can’t perform that action at this time.
0 commit comments