Spaces:
Paused
Paused
feat(security): add cookie samesite & security settings (#1517)
Browse files- .env +2 -0
- chart/env/prod.yaml +2 -0
- src/lib/server/auth.ts +12 -2
.env
CHANGED
|
@@ -6,6 +6,8 @@ MONGODB_DB_NAME=chat-ui
|
|
| 6 |
MONGODB_DIRECT_CONNECTION=false
|
| 7 |
|
| 8 |
COOKIE_NAME=hf-chat
|
|
|
|
|
|
|
| 9 |
TRUSTED_EMAIL_HEADER= # only set this if you understand the implications
|
| 10 |
|
| 11 |
HF_TOKEN=#hf_<token> from https://huggingface.co/settings/token
|
|
|
|
| 6 |
MONGODB_DIRECT_CONNECTION=false
|
| 7 |
|
| 8 |
COOKIE_NAME=hf-chat
|
| 9 |
+
COOKIE_SAMESITE=
|
| 10 |
+
COOKIE_SECURE=
|
| 11 |
TRUSTED_EMAIL_HEADER= # only set this if you understand the implications
|
| 12 |
|
| 13 |
HF_TOKEN=#hf_<token> from https://huggingface.co/settings/token
|
chart/env/prod.yaml
CHANGED
|
@@ -32,6 +32,8 @@ envVars:
|
|
| 32 |
APP_BASE: "/chat"
|
| 33 |
ALLOW_IFRAME: "false"
|
| 34 |
COMMUNITY_TOOLS: "true"
|
|
|
|
|
|
|
| 35 |
ENABLE_ASSISTANTS: "true"
|
| 36 |
ENABLE_ASSISTANTS_RAG: "true"
|
| 37 |
EXPOSE_API: "true"
|
|
|
|
| 32 |
APP_BASE: "/chat"
|
| 33 |
ALLOW_IFRAME: "false"
|
| 34 |
COMMUNITY_TOOLS: "true"
|
| 35 |
+
COOKIE_SAMESITE: "strict"
|
| 36 |
+
COOKIE_SECURE: "true"
|
| 37 |
ENABLE_ASSISTANTS: "true"
|
| 38 |
ENABLE_ASSISTANTS_RAG: "true"
|
| 39 |
EXPOSE_API: "true"
|
src/lib/server/auth.ts
CHANGED
|
@@ -47,12 +47,22 @@ export const OIDConfig = z
|
|
| 47 |
|
| 48 |
export const requiresUser = !!OIDConfig.CLIENT_ID && !!OIDConfig.CLIENT_SECRET;
|
| 49 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 50 |
export function refreshSessionCookie(cookies: Cookies, sessionId: string) {
|
| 51 |
cookies.set(env.COOKIE_NAME, sessionId, {
|
| 52 |
path: "/",
|
| 53 |
// So that it works inside the space's iframe
|
| 54 |
-
sameSite
|
| 55 |
-
secure
|
| 56 |
httpOnly: true,
|
| 57 |
expires: addWeeks(new Date(), 2),
|
| 58 |
});
|
|
|
|
| 47 |
|
| 48 |
export const requiresUser = !!OIDConfig.CLIENT_ID && !!OIDConfig.CLIENT_SECRET;
|
| 49 |
|
| 50 |
+
const sameSite = z
|
| 51 |
+
.enum(["lax", "none", "strict"])
|
| 52 |
+
.default(dev || env.ALLOW_INSECURE_COOKIES === "true" ? "lax" : "none")
|
| 53 |
+
.parse(env.COOKIE_SAMESITE === "" ? undefined : env.COOKIE_SAMESITE);
|
| 54 |
+
|
| 55 |
+
const secure = z
|
| 56 |
+
.boolean()
|
| 57 |
+
.default(!(dev || env.ALLOW_INSECURE_COOKIES === "true"))
|
| 58 |
+
.parse(env.COOKIE_SECURE === "" ? undefined : env.COOKIE_SECURE === "true");
|
| 59 |
+
|
| 60 |
export function refreshSessionCookie(cookies: Cookies, sessionId: string) {
|
| 61 |
cookies.set(env.COOKIE_NAME, sessionId, {
|
| 62 |
path: "/",
|
| 63 |
// So that it works inside the space's iframe
|
| 64 |
+
sameSite,
|
| 65 |
+
secure,
|
| 66 |
httpOnly: true,
|
| 67 |
expires: addWeeks(new Date(), 2),
|
| 68 |
});
|