20ecc05f633a39d63c564c8a39494e58311d5aaa
旧后端用 @check_contest_permission 装饰器,漏挂一眼看得出来;新后端手工在 handler 里调 canAccessContest,漏调一次就是静默放行,而且这类路由挂的是 optionalAuth (本身不拦人),从路由注册那一行完全看不出它受保护。 新增 requireContestAccess(checkType, paramName),把「取比赛 → 404 → 鉴权 → 401/403」四步收进注册行。手工调用点 5 → 2: - GET /contests/:id/access —— 报告权限而非强制,不能 403,留手工 - POST /submissions —— 比赛 id 来自请求体,中间件跑时 body 还没解析,留手工 两处都就地写了说明。canAccessContest 改成泛型,因为 Hono 的 Context 在 Variables 上逆变,写死 Context<AppEnv> 与 ContestEnv 不兼容。 实测拦截行为不变:匿名 401、登录 200、密码赛未过密码 403。 Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Description
No description provided
9.5 MiB
Languages
TypeScript
58.4%
Vue
39.2%
Shell
1.5%
Dockerfile
0.8%