From 14a110eb5fc5f5b8d878437591a8a5b7312b5ab4 Mon Sep 17 00:00:00 2001 From: qubiaobiao <3294694717@qq.com> Date: Wed, 14 Oct 2026 11:18:08 +0800 Subject: [PATCH] =?UTF-8?q?docs(auth):=20R113-=E3=89=94=20=E5=93=88?= =?UTF-8?q?=E5=B8=8C=E6=9D=A5=E6=BA=90=E6=B3=A8=E9=87=8A=E5=90=8C=E6=AD=A5?= =?UTF-8?q?=EF=BC=88schema.sql=20=E5=B7=B2=E7=BB=9F=E4=B8=80=E4=B8=BA=20bc?= =?UTF-8?q?rypt=EF=BC=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ㉔ 采纳 bcrypt:database/schema.sql 的初始口令由 SHA256(admin) 统一为 bcrypt(admin123) ⇒ 与 seeder 002 同值同形态(两条建库路径收敛)。本文件同步两处来源注释(⛔ 未删原文,保留可追溯性): ① isDefaultAdminHash 头注 —— 哈希通道来源改为「R113 前 schema.sql 无盐 SHA256;R113 起 schema.sql 与 seeder 002 统一为同一固定盐 bcrypt」; ② KNOWN_DEFAULT_ADMIN_HASHES 来源注释 —— SHA256 项改注为「历史值保留」(旧库/旧备份仍须拦截,且非默认口令不会命中)、bcrypt 项注明「两处已收敛为同值」。 验证:node --check ✔;单测 34/34;变异 3/3;R112 驱动回归 45/45;R113 判别力自证 9/9 + 5 变异全红(仓外 .workbuddy/tmp/r113/verify_r113_changes.cjs);verify_no_secrets HIGH 0/CAND 2(零新增);verify_tautology_guard PASS;verify_constant_shape_guard PASS;三文件 CR=0。 --- app/lib/passwordPolicy.js | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/app/lib/passwordPolicy.js b/app/lib/passwordPolicy.js index 92896b9..5bd6505 100644 --- a/app/lib/passwordPolicy.js +++ b/app/lib/passwordPolicy.js @@ -241,7 +241,8 @@ function requireTestPassword(appConfig) { * ⚠️ bcrypt 的盐是**随机**的:同一口令每次哈希结果都不同 ⇒ ⛔ 不能只比对哈希字符串。 * 故本模块提供**两条互补通道**,由调用方 OR 合并(见 `controller/auth.js adminLogin`): * · 哈希通道 `isDefaultAdminHash(dbHash)` —— 覆盖「DB 里就是内置的那串哈希」 - * (`schema.sql` 的无盐 SHA256 + seeder 002 的固定盐 bcrypt),**与输入无关**; + * (R113 前 `schema.sql` 的无盐 SHA256;R113 起 `schema.sql` 与 `seeder 002` + * 统一为**同一固定盐 bcrypt**),**与输入无关**; * · 口令通道 `DEFAULT_ADMIN_PASSWORDS.includes(明文)` —— 覆盖「同口令、不同盐」 * 的**重新播种**场景(登录成功的明文必等于该默认口令,见 `002-seed-admin.js` 的 * `ADMIN_INIT_PASSWORD` 分支会以随机盐重算哈希)。 @@ -258,8 +259,11 @@ const DEFAULT_ADMIN_PASSWORDS = ['admin', 'admin123', 'admin123456']; /** * 已发布默认管理员凭据的**字面哈希**(固定值,可精确比对)。 - * · `8c69…4918`:SHA256(无盐) ← `database/schema.sql` 的建库 INSERT; - * · `$2b$10$Nc6…co9.`:bcrypt(cost=10, 固定盐) ← `backend/database/seeders/002-seed-admin.js`。 + * · `8c69…4918`:SHA256(无盐) —— **R113 前** `database/schema.sql` 建库 INSERT 的产物; + * 自 **R113(候选㉔)** 起该文件已统一为下方 bcrypt ⇒ 本项作为**历史值保留**, + * 用于拦截仍存该哈希的旧库 / 旧备份(⛔ 不删:保留即安全 —— 非默认口令不会命中)。 + * · `$2b$10$Nc6…co9.`:bcrypt(cost=10, 固定盐) —— 来源**两处已收敛为同值**: + * `database/schema.sql` 的建库 INSERT + `backend/database/seeders/002-seed-admin.js`。 */ const KNOWN_DEFAULT_ADMIN_HASHES = [ '8c6976e5b5410415bde908bd4dee15dfb167a9c873fc4bb8a81f6f2ab448a918',