@@ -137,7 +137,58 @@ describe('Validation Utils', () => {
137137
138138 expect ( ( ) => validateRequest ( request , allowedHosts ) )
139139 . withContext ( `Prefix: "${ prefix } "` )
140- . toThrowError ( 'Header "x-forwarded-prefix" must not start with multiple "/" or "\\".' ) ;
140+ . toThrowError (
141+ 'Header "x-forwarded-prefix" must not start with multiple "/" or "\\" or contain ".", ".." path segments.' ,
142+ ) ;
143+ }
144+ } ) ;
145+
146+ it ( 'should throw error if x-forwarded-prefix contains dot segments' , ( ) => {
147+ const inputs = [
148+ '/./' ,
149+ '/../' ,
150+ '/foo/./bar' ,
151+ '/foo/../bar' ,
152+ '/.' ,
153+ '/..' ,
154+ './' ,
155+ '../' ,
156+ '.\\' ,
157+ '..\\' ,
158+ '/foo/.\\bar' ,
159+ '/foo/..\\bar' ,
160+ '.' ,
161+ '..' ,
162+ ] ;
163+
164+ for ( const prefix of inputs ) {
165+ const request = new Request ( 'https://example.com' , {
166+ headers : {
167+ 'x-forwarded-prefix' : prefix ,
168+ } ,
169+ } ) ;
170+
171+ expect ( ( ) => validateRequest ( request , allowedHosts ) )
172+ . withContext ( `Prefix: "${ prefix } "` )
173+ . toThrowError (
174+ 'Header "x-forwarded-prefix" must not start with multiple "/" or "\\" or contain ".", ".." path segments.' ,
175+ ) ;
176+ }
177+ } ) ;
178+
179+ it ( 'should validate x-forwarded-prefix with valid dot usage' , ( ) => {
180+ const inputs = [ '/foo.bar' , '/foo.bar/baz' , '/v1.2' , '/.well-known' ] ;
181+
182+ for ( const prefix of inputs ) {
183+ const request = new Request ( 'https://example.com' , {
184+ headers : {
185+ 'x-forwarded-prefix' : prefix ,
186+ } ,
187+ } ) ;
188+
189+ expect ( ( ) => validateRequest ( request , allowedHosts ) )
190+ . withContext ( `Prefix: "${ prefix } "` )
191+ . not . toThrow ( ) ;
141192 }
142193 } ) ;
143194 } ) ;
0 commit comments