Skip to content

Commit 0cb43c3

Browse files
committed
fix: address codeql sanitization and tls validation alerts
1 parent ce81dc0 commit 0cb43c3

2 files changed

Lines changed: 16 additions & 3 deletions

File tree

‎packages/bridge/src/runtime/vite/vite-node-shared.mjs‎

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,10 +4,23 @@ import { $fetch } from 'ofetch'
44

55
export const viteNodeOptions = JSON.parse(process.env.NUXT_VITE_NODE_OPTIONS || '{}')
66

7+
/**
8+
* The dev server may use a self-signed certificate, so validation is relaxed for
9+
* loopback hosts only. Any other host must present a valid certificate.
10+
*/
11+
function isLoopback (baseURL) {
12+
try {
13+
const { hostname } = new URL(baseURL)
14+
return ['localhost', '127.0.0.1', '[::1]', '::1'].includes(hostname)
15+
} catch {
16+
return false
17+
}
18+
}
19+
720
export const viteNodeFetch = $fetch.create({
821
baseURL: viteNodeOptions.baseURL,
922
// @ts-expect-error https://github.com/node-fetch/node-fetch#custom-agent
10-
agent: viteNodeOptions.baseURL.startsWith('https://')
23+
agent: viteNodeOptions.baseURL.startsWith('https://') && isLoopback(viteNodeOptions.baseURL)
1124
? new HTTPSAgent({ rejectUnauthorized: false })
1225
: null
1326
})

‎packages/bridge/src/vite/plugins/replace.ts‎

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,8 +5,8 @@ export function replace (replacements: Record<string, string>) {
55
name: 'nuxt:replace',
66
transform (code) {
77
Object.entries(replacements).forEach(([key, value]) => {
8-
const escapedKey = key.replace(/\./g, '\\.')
9-
code = code.replace(new RegExp(escapedKey, 'g'), value)
8+
const escapedKey = key.replace(/[.*+?^${}()|[\]\\]/g, '\\$&')
9+
code = code.replace(new RegExp(escapedKey, 'g'), () => value)
1010
})
1111
return {
1212
code,

0 commit comments

Comments
 (0)