fix: validate anonymous notification hub requests

This commit is contained in:
shuaiplus
2026-07-06 15:38:52 +08:00
parent ae168bea31
commit 23c53bd1af
2 changed files with 10 additions and 0 deletions
+8
View File
@@ -1,4 +1,6 @@
import { AuthService } from '../services/auth'; import { AuthService } from '../services/auth';
import { StorageService } from '../services/storage';
import { isAuthRequestExpired } from '../services/storage-auth-request-repo';
import type { Env, JWTPayload } from '../types'; import type { Env, JWTPayload } from '../types';
import { errorResponse, jsonResponse } from '../utils/response'; import { errorResponse, jsonResponse } from '../utils/response';
import { generateUUID } from '../utils/uuid'; import { generateUUID } from '../utils/uuid';
@@ -65,6 +67,12 @@ export async function handleAnonymousNotificationsHub(request: Request, env: Env
return errorResponse('Expected websocket', 426); return errorResponse('Expected websocket', 426);
} }
const storage = new StorageService(env.DB);
const authRequest = await storage.getAuthRequestById(authRequestId);
if (!authRequest || isAuthRequestExpired(authRequest)) {
return errorResponse('Not found', 404);
}
const id = env.NOTIFICATIONS_HUB.idFromName(authRequestId); const id = env.NOTIFICATIONS_HUB.idFromName(authRequestId);
const stub = env.NOTIFICATIONS_HUB.get(id); const stub = env.NOTIFICATIONS_HUB.get(id);
const forwardedUrl = new URL(request.url); const forwardedUrl = new URL(request.url);
+2
View File
@@ -549,6 +549,8 @@ export async function handlePublicRoute(
} }
if (path === '/notifications/anonymous-hub' && method === 'GET') { if (path === '/notifications/anonymous-hub' && method === 'GET') {
const blocked = await enforcePublicRateLimit('public-sensitive', LIMITS.rateLimit.sensitivePublicRequestsPerMinute);
if (blocked) return blocked;
return handleAnonymousNotificationsHub(request, env); return handleAnonymousNotificationsHub(request, env);
} }
return null; return null;