File tree Expand file tree Collapse file tree 4 files changed +38
-3
lines changed
packages/vite/src/node/server/middlewares
playground/assets-sanitize Expand file tree Collapse file tree 4 files changed +38
-3
lines changed Original file line number Diff line number Diff line change @@ -96,7 +96,7 @@ export function serveStaticMiddleware(
9696 return next ( )
9797 }
9898
99- const url = new URL ( req . url ! , 'http://example.com' )
99+ const url = new URL ( req . url ! . replace ( / ^ \/ + / , '/' ) , 'http://example.com' )
100100 const pathname = decodeURIComponent ( url . pathname )
101101
102102 // apply aliases to static requests as well
@@ -146,7 +146,7 @@ export function serveRawFsMiddleware(
146146
147147 // Keep the named function. The name is visible in debug logs via `DEBUG=connect:dispatcher ...`
148148 return function viteServeRawFsMiddleware ( req , res , next ) {
149- const url = new URL ( req . url ! , 'http://example.com' )
149+ const url = new URL ( req . url ! . replace ( / ^ \/ + / , '/' ) , 'http://example.com' )
150150 // In some cases (e.g. linked monorepos) files outside of root will
151151 // reference assets that are also out of served root. In such cases
152152 // the paths are rewritten to `/@fs/` prefixed paths and must be served by
Original file line number Diff line number Diff line change 1+ KEY = unsafe
Original file line number Diff line number Diff line change @@ -25,3 +25,8 @@ if (!isBuild) {
2525 expect ( Object . keys ( manifest ) . length ) . toBe ( 3 ) // 2 svg, 1 index.js
2626 } )
2727}
28+
29+ test . runIf ( ! isBuild ) ( 'denied .env' , async ( ) => {
30+ expect ( await page . textContent ( '.unsafe-dotenv' ) ) . toBe ( '403' )
31+ expect ( await page . textContent ( '.unsafe-dotenv-double-slash' ) ) . toBe ( '403' )
32+ } )
Original file line number Diff line number Diff line change 66 margin-bottom : 1rem ;
77 }
88</ style >
9- < h1 > test elements below should show circles and their url</ h1 >
9+ < h3 > test elements below should show circles and their url</ h3 >
1010< div class ="test-el plus-circle "> </ div >
1111< div class ="test-el underscore-circle "> </ div >
12+
13+ < h3 > Denied .env</ h3 >
14+ < div class ="unsafe-dotenv "> </ div >
15+ < div class ="unsafe-dotenv-double-slash "> </ div >
16+
17+ < script type ="module ">
18+ // .env, denied by default. See fs-serve playground for other fs tests
19+ // these checks ensure that a project without a custom root respects fs.deny
20+
21+ fetch ( '/.env' )
22+ . then ( ( r ) => {
23+ text ( '.unsafe-dotenv' , r . status )
24+ } )
25+ . catch ( ( e ) => {
26+ console . error ( e )
27+ } )
28+
29+ fetch ( window . location + '/.env' )
30+ . then ( ( r ) => {
31+ text ( '.unsafe-dotenv-double-slash' , r . status )
32+ } )
33+ . catch ( ( e ) => {
34+ console . error ( e )
35+ } )
36+
37+ function text ( el , text ) {
38+ document . querySelector ( el ) . textContent = text
39+ }
40+ </ script >
You can’t perform that action at this time.
0 commit comments