@sveltejs/kit 2.8.1 → 2.8.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/package.json +1 -1
- package/src/core/postbuild/prerender.js +5 -4
- package/src/exports/vite/dev/index.js +2 -1
- package/src/exports/vite/utils.js +9 -2
- package/src/runtime/client/client.js +3 -1
- package/src/runtime/server/cookie.js +2 -4
- package/src/runtime/server/page/csp.js +2 -2
- package/src/runtime/server/page/serialize_data.js +2 -2
- package/src/runtime/server/utils.js +2 -1
- package/src/utils/escape.js +36 -20
- package/src/version.js +1 -1
- package/types/index.d.ts.map +1 -1
package/package.json
CHANGED
|
@@ -4,7 +4,7 @@ import { pathToFileURL } from 'node:url';
|
|
|
4
4
|
import { installPolyfills } from '../../exports/node/polyfills.js';
|
|
5
5
|
import { mkdirp, posixify, walk } from '../../utils/filesystem.js';
|
|
6
6
|
import { decode_uri, is_root_relative, resolve } from '../../utils/url.js';
|
|
7
|
-
import {
|
|
7
|
+
import { escape_html } from '../../utils/escape.js';
|
|
8
8
|
import { logger } from '../utils.js';
|
|
9
9
|
import { load_config } from '../config/index.js';
|
|
10
10
|
import { get_route_segments } from '../../utils/routing.js';
|
|
@@ -359,9 +359,10 @@ async function prerender({ out, manifest_path, metadata, verbose, env }) {
|
|
|
359
359
|
dest,
|
|
360
360
|
`<script>location.href=${devalue.uneval(
|
|
361
361
|
location
|
|
362
|
-
)};</script><meta http-equiv="refresh" content
|
|
363
|
-
`0;url=${location}
|
|
364
|
-
|
|
362
|
+
)};</script><meta http-equiv="refresh" content="${escape_html(
|
|
363
|
+
`0;url=${location}`,
|
|
364
|
+
true
|
|
365
|
+
)}">`
|
|
365
366
|
);
|
|
366
367
|
|
|
367
368
|
written.add(file);
|
|
@@ -18,6 +18,7 @@ import { compact } from '../../../utils/array.js';
|
|
|
18
18
|
import { not_found } from '../utils.js';
|
|
19
19
|
import { SCHEME } from '../../../utils/url.js';
|
|
20
20
|
import { check_feature } from '../../../utils/features.js';
|
|
21
|
+
import { escape_html } from '../../../utils/escape.js';
|
|
21
22
|
|
|
22
23
|
const cwd = process.cwd();
|
|
23
24
|
|
|
@@ -508,7 +509,7 @@ export async function dev(vite, vite_config, svelte_config) {
|
|
|
508
509
|
const error_template = ({ status, message }) => {
|
|
509
510
|
return error_page
|
|
510
511
|
.replace(/%sveltekit\.status%/g, String(status))
|
|
511
|
-
.replace(/%sveltekit\.error\.message%/g, message);
|
|
512
|
+
.replace(/%sveltekit\.error\.message%/g, escape_html(message));
|
|
512
513
|
};
|
|
513
514
|
|
|
514
515
|
res.writeHead(500, {
|
|
@@ -3,6 +3,7 @@ import { loadEnv } from 'vite';
|
|
|
3
3
|
import { posixify } from '../../utils/filesystem.js';
|
|
4
4
|
import { negotiate } from '../../utils/http.js';
|
|
5
5
|
import { filter_private_env, filter_public_env } from '../../utils/env.js';
|
|
6
|
+
import { escape_html } from '../../utils/escape.js';
|
|
6
7
|
|
|
7
8
|
/**
|
|
8
9
|
* Transforms kit.alias to a valid vite.resolve.alias array.
|
|
@@ -89,11 +90,17 @@ export function not_found(req, res, base) {
|
|
|
89
90
|
if (type === 'text/html') {
|
|
90
91
|
res.setHeader('Content-Type', 'text/html');
|
|
91
92
|
res.end(
|
|
92
|
-
`The server is configured with a public base URL of ${
|
|
93
|
+
`The server is configured with a public base URL of ${escape_html(
|
|
94
|
+
base
|
|
95
|
+
)} - did you mean to visit <a href="${escape_html(prefixed, true)}">${escape_html(
|
|
96
|
+
prefixed
|
|
97
|
+
)}</a> instead?`
|
|
93
98
|
);
|
|
94
99
|
} else {
|
|
95
100
|
res.end(
|
|
96
|
-
`The server is configured with a public base URL of ${
|
|
101
|
+
`The server is configured with a public base URL of ${escape_html(
|
|
102
|
+
base
|
|
103
|
+
)} - did you mean to visit ${escape_html(prefixed)} instead?`
|
|
97
104
|
);
|
|
98
105
|
}
|
|
99
106
|
}
|
|
@@ -669,7 +669,9 @@ async function load_node({ loader, parent, url, params, route, server_data_node
|
|
|
669
669
|
: await resource.blob(),
|
|
670
670
|
cache: resource.cache,
|
|
671
671
|
credentials: resource.credentials,
|
|
672
|
-
headers
|
|
672
|
+
// the headers are undefined on the server if the Headers object is empty
|
|
673
|
+
// so we need to make sure they are also undefined here if there are no headers
|
|
674
|
+
headers: [...resource.headers].length ? resource.headers : undefined,
|
|
673
675
|
integrity: resource.integrity,
|
|
674
676
|
keepalive: resource.keepalive,
|
|
675
677
|
method: resource.method,
|
|
@@ -67,8 +67,7 @@ export function get_cookies(request, url, trailing_slash) {
|
|
|
67
67
|
return c.value;
|
|
68
68
|
}
|
|
69
69
|
|
|
70
|
-
const
|
|
71
|
-
const req_cookies = parse(header, { decode: decoder });
|
|
70
|
+
const req_cookies = parse(header, { decode: opts?.decode });
|
|
72
71
|
const cookie = req_cookies[name]; // the decoded string or undefined
|
|
73
72
|
|
|
74
73
|
// in development, if the cookie was set during this session with `cookies.set`,
|
|
@@ -95,8 +94,7 @@ export function get_cookies(request, url, trailing_slash) {
|
|
|
95
94
|
* @param {import('cookie').CookieParseOptions} opts
|
|
96
95
|
*/
|
|
97
96
|
getAll(opts) {
|
|
98
|
-
const
|
|
99
|
-
const cookies = parse(header, { decode: decoder });
|
|
97
|
+
const cookies = parse(header, { decode: opts?.decode });
|
|
100
98
|
|
|
101
99
|
for (const c of Object.values(new_cookies)) {
|
|
102
100
|
if (
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { escape_html } from '../../../utils/escape.js';
|
|
2
2
|
import { base64, sha256 } from './crypto.js';
|
|
3
3
|
|
|
4
4
|
const array = new Uint8Array(16);
|
|
@@ -300,7 +300,7 @@ class CspProvider extends BaseProvider {
|
|
|
300
300
|
return;
|
|
301
301
|
}
|
|
302
302
|
|
|
303
|
-
return `<meta http-equiv="content-security-policy" content
|
|
303
|
+
return `<meta http-equiv="content-security-policy" content="${escape_html(content, true)}">`;
|
|
304
304
|
}
|
|
305
305
|
}
|
|
306
306
|
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { escape_html } from '../../../utils/escape.js';
|
|
2
2
|
import { hash } from '../../hash.js';
|
|
3
3
|
|
|
4
4
|
/**
|
|
@@ -70,7 +70,7 @@ export function serialize_data(fetched, filter, prerendering = false) {
|
|
|
70
70
|
const attrs = [
|
|
71
71
|
'type="application/json"',
|
|
72
72
|
'data-sveltekit-fetched',
|
|
73
|
-
`data-url
|
|
73
|
+
`data-url="${escape_html(fetched.url, true)}"`
|
|
74
74
|
];
|
|
75
75
|
|
|
76
76
|
if (fetched.is_b64) {
|
|
@@ -5,6 +5,7 @@ import { negotiate } from '../../utils/http.js';
|
|
|
5
5
|
import { HttpError } from '../control.js';
|
|
6
6
|
import { fix_stack_trace } from '../shared-server.js';
|
|
7
7
|
import { ENDPOINT_METHODS } from '../../constants.js';
|
|
8
|
+
import { escape_html } from '../../utils/escape.js';
|
|
8
9
|
|
|
9
10
|
/** @param {any} body */
|
|
10
11
|
export function is_pojo(body) {
|
|
@@ -50,7 +51,7 @@ export function allowed_methods(mod) {
|
|
|
50
51
|
* @param {string} message
|
|
51
52
|
*/
|
|
52
53
|
export function static_error_page(options, status, message) {
|
|
53
|
-
let page = options.templates.error({ status, message });
|
|
54
|
+
let page = options.templates.error({ status, message: escape_html(message) });
|
|
54
55
|
|
|
55
56
|
if (DEV) {
|
|
56
57
|
// inject Vite HMR client, for easier debugging
|
package/src/utils/escape.js
CHANGED
|
@@ -6,41 +6,57 @@
|
|
|
6
6
|
const escape_html_attr_dict = {
|
|
7
7
|
'&': '&',
|
|
8
8
|
'"': '"'
|
|
9
|
+
// Svelte also escapes < because the escape function could be called inside a `noscript` there
|
|
10
|
+
// https://github.com/sveltejs/svelte/security/advisories/GHSA-8266-84wp-wv5c
|
|
11
|
+
// However, that doesn't apply in SvelteKit
|
|
9
12
|
};
|
|
10
13
|
|
|
14
|
+
/**
|
|
15
|
+
* @type {Record<string, string>}
|
|
16
|
+
*/
|
|
17
|
+
const escape_html_dict = {
|
|
18
|
+
'&': '&',
|
|
19
|
+
'<': '<'
|
|
20
|
+
};
|
|
21
|
+
|
|
22
|
+
const surrogates = // high surrogate without paired low surrogate
|
|
23
|
+
'[\\ud800-\\udbff](?![\\udc00-\\udfff])|' +
|
|
24
|
+
// a valid surrogate pair, the only match with 2 code units
|
|
25
|
+
// we match it so that we can match unpaired low surrogates in the same pass
|
|
26
|
+
// TODO: use lookbehind assertions once they are widely supported: (?<![\ud800-udbff])[\udc00-\udfff]
|
|
27
|
+
'[\\ud800-\\udbff][\\udc00-\\udfff]|' +
|
|
28
|
+
// unpaired low surrogate (see previous match)
|
|
29
|
+
'[\\udc00-\\udfff]';
|
|
30
|
+
|
|
11
31
|
const escape_html_attr_regex = new RegExp(
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
// TODO: use lookbehind assertions once they are widely supported: (?<![\ud800-udbff])[\udc00-\udfff]
|
|
19
|
-
'[\\ud800-\\udbff][\\udc00-\\udfff]|' +
|
|
20
|
-
// unpaired low surrogate (see previous match)
|
|
21
|
-
'[\\udc00-\\udfff]',
|
|
32
|
+
`[${Object.keys(escape_html_attr_dict).join('')}]|` + surrogates,
|
|
33
|
+
'g'
|
|
34
|
+
);
|
|
35
|
+
|
|
36
|
+
const escape_html_regex = new RegExp(
|
|
37
|
+
`[${Object.keys(escape_html_dict).join('')}]|` + surrogates,
|
|
22
38
|
'g'
|
|
23
39
|
);
|
|
24
40
|
|
|
25
41
|
/**
|
|
26
|
-
*
|
|
27
|
-
*
|
|
28
|
-
* It escapes unpaired surrogates (which are allowed in js strings but invalid in HTML), escapes
|
|
29
|
-
* characters that are special in attributes, and surrounds the whole string in double-quotes.
|
|
42
|
+
* Escapes unpaired surrogates (which are allowed in js strings but invalid in HTML) and
|
|
43
|
+
* escapes characters that are special.
|
|
30
44
|
*
|
|
31
45
|
* @param {string} str
|
|
32
|
-
* @
|
|
33
|
-
* @
|
|
46
|
+
* @param {boolean} [is_attr]
|
|
47
|
+
* @returns {string} escaped string
|
|
48
|
+
* @example const html = `<tag data-value="${escape_html('value', true)}">...</tag>`;
|
|
34
49
|
*/
|
|
35
|
-
export function
|
|
36
|
-
const
|
|
50
|
+
export function escape_html(str, is_attr) {
|
|
51
|
+
const dict = is_attr ? escape_html_attr_dict : escape_html_dict;
|
|
52
|
+
const escaped_str = str.replace(is_attr ? escape_html_attr_regex : escape_html_regex, (match) => {
|
|
37
53
|
if (match.length === 2) {
|
|
38
54
|
// valid surrogate pair
|
|
39
55
|
return match;
|
|
40
56
|
}
|
|
41
57
|
|
|
42
|
-
return
|
|
58
|
+
return dict[match] ?? `&#${match.charCodeAt(0)};`;
|
|
43
59
|
});
|
|
44
60
|
|
|
45
|
-
return
|
|
61
|
+
return escaped_str;
|
|
46
62
|
}
|
package/src/version.js
CHANGED
package/types/index.d.ts.map
CHANGED
|
@@ -155,6 +155,6 @@
|
|
|
155
155
|
null,
|
|
156
156
|
null
|
|
157
157
|
],
|
|
158
|
-
"mappings": "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
|
|
158
|
+
"mappings": ";;;;;;;;;kBA2BiBA,OAAOA;;;;;;;;;;;;;;;;;;;;;;;;;;;aA2BZC,cAAcA;;;;;;aAMdC,cAAcA;;;;;;;;;;;;;;;kBAeTC,aAAaA;;;;;;;;;;;;;;;;kBAgBbC,OAAOA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;kBAkGPC,MAAMA;;;;;;;;;;;;;;;;;;;;;kBAqBNC,OAAOA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;kBA4DPC,QAAQA;;;;;;;;kBAQRC,SAASA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;aAuZdC,MAAMA;;;;;;;;;;;aAWNC,iBAAiBA;;;;;;;;;;;;;aAajBC,iBAAiBA;;;;;;;;;;aAUjBC,WAAWA;;;;;;;;;;aAUXC,OAAOA;;;;;;aAMPC,IAAIA;;;;;;;;;;;;kBAYCC,SAASA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;kBA4GTC,eAAeA;;;;;;;;;;;;;;;;;;;;;;;;;;kBA0BfC,gBAAgBA;;;;;;;;;;;;;;;;;;;;;;;;aAwBrBC,cAAcA;;kBAETC,UAAUA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;kBAoCVC,cAAcA;;;;;;;;;;kBAUdC,UAAUA;;;;;;;;;;;;;;;;;;kBAkBVC,aAAaA;;;;;;;;;;;;;;;;;;;kBAmBbC,IAAIA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;aA8CTC,YAAYA;;kBAEPC,YAAYA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;aA4FjBC,cAAcA;;;;;kBAKTC,cAAcA;;;;;;;;;;;;;;;;;;;;;;;kBAuBdC,eAAeA;;;;;;;;;;;;;;;cAenBC,MAAMA;;;;;;kBAMFC,iBAAiBA;;;;;;;kBAOjBC,WAAWA;;;;;;;;;;;;;;;;;;;;;aAqBhBC,UAAUA;;;;;;;kBAOLC,eAAeA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;aAqEpBC,MAAMA;;;;;;;;;;aAUNC,OAAOA;;;;;;;;;;;;;;;;aAgBPC,YAAYA;;;;;;;;;;;;kBC7xCXC,SAASA;;;;;;;;;;kBAqBTC,QAAQA;;;;;;;aDqyCTC,cAAcA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;kBA6BTC,QAAQA;;;;WEj1CRC,YAAYA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;WAkDZC,GAAGA;;;;;;;;;;;;;;;;;;;;;WAqBHC,aAAaA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;MAmElBC,UAAUA;;WAELC,MAAMA;;;;;;;;;MASXC,YAAYA;;WAEPC,WAAWA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;WAmCXC,yBAAyBA;;;;;;;;;;WAUzBC,yBAAyBA;;;;WAIzBC,sCAAsCA;;;;MAI3CC,8BAA8BA;MAC9BC,8BAA8BA;MAC9BC,2CAA2CA;;;;;;aAM3CC,eAAeA;;WAIVC,cAAcA;;;;;WAKdC,YAAYA;;;;;;MAMjBC,aAAaA;WC3LRC,KAAKA;;;;;;WAcLC,SAASA;;;;;;;;;;;;;;;;;WA6ETC,YAAYA;;;;;;;;;;;;WAYZC,QAAQA;;;;;;;;;;;;;;MAyBbC,iBAAiBA;;;;;;;;WAUZC,UAAUA;;;;;;;;;;;;;WAaVC,SAASA;;;;;;;;;;;;;;;;;;;;;;;WAsGTC,YAAYA;;;;;;;;;;;;;MAajBC,kBAAkBA;;WAEbC,OAAOA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;MAsCZC,aAAaA;;WA2BRC,eAAeA;;;;;;MAMpBC,uBAAuBA;;MAEvBC,WAAWA;;;;;;;;WAQNC,QAAQA;;;;;;;;;MA2CbC,eAAeA;;;;;MAKfC,kBAAkBA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBC7WdC,WAAWA;;;;;;;;;;;iBAcXC,QAAQA;;;;;iBAiBRC,UAAUA;;;;;;iBASVC,IAAIA;;;;;;iBA8BJC,IAAIA;;;;;;;;;;;;;;;;iBAkDJC,eAAeA;aA7LkCC,QAAQA;aAMVC,YAAYA;cCZ9DC,OAAOA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBCoEJC,QAAQA;;;;;;iBCoCFC,UAAUA;;;;;;iBAkCVC,WAAWA;;;;;iBAgFjBC,oBAAoBA;;;;;;;;;;;iBC3MpBC,gBAAgBA;;;;;;;;;iBC+GVC,SAASA;;;;;;;;;cC9HlBC,OAAOA;;;;;cAKPC,GAAGA;;;;;cAKHC,QAAQA;;;;;cAKRC,OAAOA;;;;;;;;;;;;;;;;;;;;;;;;iBCWJC,WAAWA;;;;;;;;;;;;;;;;;;;;;iBAyCXC,OAAOA;;;;;;;iBC81DDC,WAAWA;;;;;;;;;;;iBArSjBC,aAAaA;;;;;;;;;;;;iBAiBbC,cAAcA;;;;;;;;;;iBAedC,UAAUA;;;;;iBASVC,qBAAqBA;;;;;;;;iBA2BrBC,IAAIA;;;;;;;;;;;;;;;;;;;;;;;;iBAsCJC,UAAUA;;;;iBAmBVC,aAAaA;;;;;;;;;;;;iBAqBPC,WAAWA;;;;;;;;;;;;;;;;;;iBAoCjBC,WAAWA;;;;;iBA2BXC,SAASA;;;;;iBA4CTC,YAAYA;MVjuDhB7D,YAAYA;;;;;;;;;;;YWtJb8D,IAAIA;;;;;;;YAOJC,MAAMA;;;;;;;;;;;;;;;;;iBAiBDC,YAAYA;;;;;;;;;;;;;;;;;;iBCVZC,IAAIA;;;;;;iBCXPC,SAASA;;;;;;;;;;;;;;cAwBTC,IAAIA;;;;;;;;cAeJC,UAAUA;;;;;;cAaVC,OAAOA",
|
|
159
159
|
"ignoreList": []
|
|
160
160
|
}
|