Skip to content

Commit 265abf1

Browse files
authored
🔒️ Harden session ID generator (#599)
1 parent e6e851b commit 265abf1

File tree

1 file changed

+13
-3
lines changed

1 file changed

+13
-3
lines changed

src/hooks.server.ts

Lines changed: 13 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -13,9 +13,7 @@ import { ERROR_MESSAGES } from "$lib/stores/errors";
1313
export const handle: Handle = async ({ event, resolve }) => {
1414
const token = event.cookies.get(COOKIE_NAME);
1515

16-
event.locals.sessionId = token || crypto.randomUUID();
17-
18-
const user = await collections.users.findOne({ sessionId: event.locals.sessionId });
16+
const user = token ? await collections.users.findOne({ sessionId: token }) : null;
1917

2018
if (user) {
2119
event.locals.user = user;
@@ -33,6 +31,18 @@ export const handle: Handle = async ({ event, resolve }) => {
3331
});
3432
}
3533

34+
if (!token) {
35+
const sessionId = crypto.randomUUID();
36+
if (await collections.users.findOne({ sessionId })) {
37+
return errorResponse(500, "Session ID collision");
38+
}
39+
event.locals.sessionId = sessionId;
40+
} else {
41+
event.locals.sessionId = token;
42+
}
43+
44+
Object.freeze(event.locals);
45+
3646
// CSRF protection
3747
const requestContentType = event.request.headers.get("content-type")?.split(";")[0] ?? "";
3848
/** https://developer.mozilla.org/en-US/docs/Web/HTML/Element/form#attr-enctype */

0 commit comments

Comments
 (0)