diff --git a/deploy/prepare-staging-rc.sh b/deploy/prepare-staging-rc.sh index 173c9c50..ff6dc617 100755 --- a/deploy/prepare-staging-rc.sh +++ b/deploy/prepare-staging-rc.sh @@ -156,6 +156,17 @@ printf '[4/7] 构建 game-admin stage\n' corepack prepare pnpm@9.15.4 --activate (cd game-admin && pnpm install --frozen-lockfile && pnpm build:stage) +# 前端制品可被所有内测用户读取,任何默认口令、模拟令牌或预置密钥标识都必须拒绝签发。 +for build_dir in game-studio/dist game-admin/dist-stage; do + if rg -n -i 'admin123|mock-token|bootstrap-admin\.token|DOGFOOD_PASSWORD_SEED' "$build_dir" \ + >"$evidence/frontend-secret-scan.log"; then + printf '前端制品包含禁止发布的凭据或模拟令牌:%s\n' "$build_dir" >&2 + exit 5 + fi +done +printf 'FRONTEND_SECRET_SCAN_PASS\n' >"$evidence/frontend-secret-scan.log" +chmod 600 "$evidence/frontend-secret-scan.log" + printf '[5/7] 准备 commit 内独立 Python 虚拟环境\n' UV_BIN="${UV_BIN:-/root/.local/bin/uv}" [ -x "$UV_BIN" ] || { printf '缺少 uv:%s\n' "$UV_BIN" >&2; exit 5; } @@ -217,6 +228,8 @@ printf '[7/7] 记录制品与启动坐标\n' printf 'security_java_tests_summary_sha256=%s\n' "$(sha256sum "$evidence/security-java-tests-summary.tsv" | awk '{print $1}')" printf 'studio_build=PASS\n' printf 'admin_build=PASS\n' + printf 'frontend_secret_scan=PASS\n' + printf 'frontend_secret_scan_sha256=%s\n' "$(sha256sum "$evidence/frontend-secret-scan.log" | awk '{print $1}')" } >"$evidence/verification-summary.txt" [ -z "$(git status --porcelain --untracked-files=no)" ] || { printf '构建修改了 tracked 文件,拒绝将其标为 ready。\n' >&2; exit 6; } diff --git a/deploy/tests/test-staging-rc.sh b/deploy/tests/test-staging-rc.sh index aedd1769..fe6d14bf 100755 --- a/deploy/tests/test-staging-rc.sh +++ b/deploy/tests/test-staging-rc.sh @@ -174,6 +174,8 @@ rg -q 'security_java_tests_sha256=' "$PREPARE" || fail "prepare 摘要未绑定 rg -q 'verify_security_java_reports' "$PREPARE" || fail "prepare 未校验安全测试报告实际包含全部目标类" rg -q 'security-java-tests-summary\.tsv' "$PREPARE" || fail "prepare 未保存可审计的 Java 测试计数摘要" rg -q 'security_java_tests_summary_sha256=' "$PREPARE" || fail "prepare 摘要未绑定 Java 测试计数证据" +rg -q 'FRONTEND_SECRET_SCAN_PASS' "$PREPARE" || fail "prepare 未扫描前端制品中的默认凭据" +rg -q 'frontend_secret_scan_sha256=' "$PREPARE" || fail "prepare 摘要未绑定前端凭据扫描证据" ! rg -q 'backend_tests=NOT_RUN' "$PREPARE" || fail "prepare 仍宣称后端测试未运行" venv_line="$(rg -n '准备 commit 内独立 Python 虚拟环境' "$PREPARE" | cut -d: -f1)" tool_test_line="$(rg -n '运行发布工具回归测试' "$PREPARE" | cut -d: -f1)" diff --git a/game-admin/.env b/game-admin/.env index a0ff459f..66bb3730 100644 --- a/game-admin/.env +++ b/game-admin/.env @@ -19,10 +19,10 @@ VITE_APP_DOCALERT_ENABLE=true # 百度统计 VITE_APP_BAIDU_CODE = a1ff8825baa73c3a78eb96aa40325abc -# 默认账户密码 +# 登录页只允许预填公开租户名,禁止把任何账号口令编进前端制品 VITE_APP_DEFAULT_LOGIN_TENANT = 芋道源码 -VITE_APP_DEFAULT_LOGIN_USERNAME = admin -VITE_APP_DEFAULT_LOGIN_PASSWORD = admin123 +VITE_APP_DEFAULT_LOGIN_USERNAME = +VITE_APP_DEFAULT_LOGIN_PASSWORD = # API 加解密 VITE_APP_API_ENCRYPT_ENABLE = true @@ -34,4 +34,4 @@ VITE_APP_API_ENCRYPT_RESPONSE_KEY = 96103715984234343991809655248883 # VITE_APP_API_ENCRYPT_RESPONSE_KEY = MIICdgIBADANBgkqhkiG9w0BAQEFAASCAmAwggJcAgEAAoGBAOH8IfIFxL/MR9XIg1UDv5z1fGXQI93E8wrU4iPFovL/sEt9uSgSkjyidC2O7N+m7EKtoN6b1u7cEwXSkwf3kfK0jdWLSQaNpX5YshqXCBzbDfugDaxuyYrNA4/tIMs7mzZAk0APuRXB35Dmupou7Yw7TFW/7QhQmGfzeEKULQvnAgMBAAECgYAw8LqlQGyQoPv5p3gRxEMOCfgL0JzD3XBJKztiRd35RDh40Nx1ejgjW4dPioFwGiVWd2W8cAGHLzALdcQT2KDJh+T/tsd4SPmI6uSBBK6Ff2DkO+kFFcuYvfclQQKqxma5CaZOSqhgenacmgTMFeg2eKlY3symV6JlFNu/IKU42QJBAOhxAK/Eq3e61aYQV2JSguhMR3b8NXJJRroRs/QHEanksJtl+M+2qhkC9nQVXBmBkndnkU/l2tYcHfSBlAyFySMCQQD445tgm/J2b6qMQmuUGQAYDN8FIkHjeKmha+l/fv0igWm8NDlBAem91lNDIPBUzHL1X1+pcts5bjmq99YdOnhtAkAg2J8dN3B3idpZDiQbC8fd5bGPmdI/pSUudAP27uzLEjr2qrE/QPPGdwm2m7IZFJtK7kK1hKio6u48t/bg0iL7AkEAuUUs94h+v702Fnym+jJ2CHEkXvz2US8UDs52nWrZYiM1o1y4tfSHm8H8bv8JCAa9GHyriEawfBraILOmllFdLQJAQSRZy4wmlaG48MhVXodB85X+VZ9krGXZ2TLhz7kz9iuToy53l9jTkESt6L5BfBDCVdIwcXLYgK+8KFdHN5W7HQ== # 百度地图 -VITE_BAIDU_MAP_KEY = 'Y2aJXiswwPxy6mwFs1z9c7U5gwX9WfUN' \ No newline at end of file +VITE_BAIDU_MAP_KEY = 'Y2aJXiswwPxy6mwFs1z9c7U5gwX9WfUN' diff --git a/game-admin/src/views/Login/SocialLogin.vue b/game-admin/src/views/Login/SocialLogin.vue index 961f4ddb..11d99fe0 100644 --- a/game-admin/src/views/Login/SocialLogin.vue +++ b/game-admin/src/views/Login/SocialLogin.vue @@ -199,9 +199,10 @@ const loginData = reactive({ captchaEnable: import.meta.env.VITE_APP_CAPTCHA_ENABLE !== 'false', tenantEnable: import.meta.env.VITE_APP_TENANT_ENABLE !== 'false', loginForm: { - tenantName: '芋道源码', - username: 'admin', - password: 'admin123', + // 社交登录回调页与普通登录页共用无凭据默认值,避免口令进入浏览器制品。 + tenantName: import.meta.env.VITE_APP_DEFAULT_LOGIN_TENANT || '', + username: import.meta.env.VITE_APP_DEFAULT_LOGIN_USERNAME || '', + password: import.meta.env.VITE_APP_DEFAULT_LOGIN_PASSWORD || '', captchaVerification: '', rememberMe: false }