From a47e823277dea70a3e1497f9318b3cfb722df864 Mon Sep 17 00:00:00 2001 From: qubiaobiao <3294694717@qq.com> Date: Wed, 30 Sep 2026 11:39:53 +0800 Subject: [PATCH] =?UTF-8?q?fix(auth):=20=E6=BF=80=E6=B4=BB=E9=A1=B5?= =?UTF-8?q?=E6=B8=85=E9=99=A4=E6=AE=8B=E7=95=99=E7=99=BB=E5=BD=95=E6=80=81?= =?UTF-8?q?=20+=20=E5=85=A8=E7=AB=99=E5=AF=86=E7=A0=81=E6=A1=86=E6=98=BE?= =?UTF-8?q?=E5=BC=8F=20autocomplete=20=E8=AF=AD=E4=B9=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit R61/R62:两个独立缺陷(测试人员反馈「设置密码框已有 123456 + 激活后直接进管理后台」)。 ① 激活后进管理后台 —— 安全缺陷(公用电脑 = 越权) Activate.vue 激活成功与「返回登录」都跳 /login,而 router guard (router/index.js:203-222)见到 isLoggedIn && role==='admin' 会重定向到 /admin。 浏览器残留 admin 登录态时(测试人员刚用 admin 操作过后台),考生会被 直接送进管理后台;且 /api/admin/* 全部挂 adminAuth(router.js:25) ⇒ 残留 token 有效时管理接口真能调。 修法:激活页按「未登录」语义处理 —— onMounted 与激活成功后均 clearAuth()。 ② 设置密码页密码框被浏览器预填 密码框未显式声明 autocomplete,而 EP el-input 该 prop 默认 "off", Chromium 对 type=password 会忽略 off,改用该站点已保存凭据自动填充。 密码规则仅 min:6 ⇒ "123456" 恰好合法 ⇒ 用户不知情下即把密码设成 123456。 修法:6 个密码框显式声明语义 —— 设密码/重置密码 new-password(4 处), 登录 current-password(2 处,含管理员 tab)。 验证:真浏览器 21/21 断言通过(含「残留 admin 态直接访问 /login 必跳 /admin」 对照臂,证明断言非恒真);TDZ 扫描 PASS(26 文件);权威脚本构建 157 文件 / 70 .gz;生产零中断上线(MainPID/NRestarts/ActiveEnterTimestamp 未变)。 --- src/views/Activate.vue | 14 ++++++++++++++ src/views/ForgotPassword.vue | 2 ++ src/views/Login.vue | 2 ++ 3 files changed, 18 insertions(+) diff --git a/src/views/Activate.vue b/src/views/Activate.vue index fe931ba..df49575 100644 --- a/src/views/Activate.vue +++ b/src/views/Activate.vue @@ -149,6 +149,7 @@ { router.push('/login') @@ -452,6 +463,9 @@ function startSmsCountdown() { // ==================== 生命周期 ==================== onMounted(() => { + // 进入激活页即按「未登录」处理(R61):清掉残留 token/user, + // 覆盖两条会跳 /login 的路径 —— ①本页「返回登录」按钮 ②激活成功后的跳转。 + authStore.clearAuth() refreshCaptcha() }) diff --git a/src/views/ForgotPassword.vue b/src/views/ForgotPassword.vue index 832bf28..19c2dc9 100644 --- a/src/views/ForgotPassword.vue +++ b/src/views/ForgotPassword.vue @@ -139,6 +139,7 @@