Skip to content

Commit 4cab1e7

Browse files
authored
stop gap for open redirect (#22839)
1 parent 1b74f30 commit 4cab1e7

2 files changed

Lines changed: 16 additions & 1 deletion

File tree

lib/patterns.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ export const hasLiquid = /[{{][{%]/
2828
export const dataReference = /{% ?data\s(?:early-access\.)?(?:reusables|variables|ui)\..*?%}/gm
2929
export const imagePath = /\/?assets\/images\/.*?\.(png|svg|gif|pdf|ico|jpg|jpeg)/gi
3030
export const homepagePath = /^\/\w{2}$/ // /en, /ja /cn
31-
export const multipleSlashes = /^\/{2,}/
31+
export const multipleSlashes = /^(\/|\\){2,}/
3232
export const assetPaths = /\/(?:javascripts|stylesheets|assets|node_modules|dist|_next)\//
3333
export const oldApiPath = /\/v[34]\/(?!guides|overview).+?\/.+/
3434
export const staticRedirect = /<link rel="canonical" href="(.+?)">/

tests/routing/middleware/redirects/help-to-docs.js

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -83,4 +83,19 @@ describe('help.github.com redirect middleware', () => {
8383
`<p>Moved Permanently. Redirecting to <a href="${expectedRedirect}">${expectedRedirect}</a></p>`
8484
)
8585
})
86+
87+
it('only redirects to a docs.github.com path backlash edition', async () => {
88+
const req = {
89+
hostname: 'help.github.com',
90+
protocol: 'https',
91+
originalUrl: '/\\evil.com',
92+
}
93+
const res = new MockExpressResponse()
94+
const next = jest.fn()
95+
await middleware(req, res, next)
96+
const expectedRedirect = 'https://docs.github.com/evil.com'
97+
expect(res._getString()).toEqual(
98+
`<p>Moved Permanently. Redirecting to <a href="${expectedRedirect}">${expectedRedirect}</a></p>`
99+
)
100+
})
86101
})

0 commit comments

Comments
 (0)