security: 隐藏 MongoDB 连接串与库名,health 不再返回 uri/db 并对错误脱敏

This commit is contained in:
ice-a
2026-10-16 19:08:06 +08:00
parent e1572e1327
commit 090a7254e0
7 changed files with 16 additions and 13 deletions
+10 -5
View File
@@ -68,18 +68,23 @@ export async function downloadsCol(): Promise<Collection<DownloadDoc>> {
return (await getDb()).collection<DownloadDoc>('downloads')
}
/** 供 /api/health 使用:探测 MongoDB 是否可用 */
/** 把驱动错误里的连接串 / 主机名脱敏,避免泄露凭证与数据库地址 */
function sanitizeMongoError(raw: string): string {
return raw
.replace(/mongodb(\+srv)?:\/\/[^\s'"]+/gi, '***')
.replace(/[a-z0-9.-]+\.mongodb\.net(?::\d+)?/gi, '***')
}
/** 供 /api/health 使用:探测 MongoDB 是否可用(不返回任何连接串 / 库名) */
export async function mongoStatus() {
try {
const db = await getDb()
await db.command({ ping: 1 })
return { ok: true, uri: mongoUri(), db: mongoDbName(), error: null as string | null }
return { ok: true, error: null as string | null }
} catch (err) {
return {
ok: false,
uri: mongoUri(),
db: mongoDbName(),
error: lastError?.message || (err instanceof Error ? err.message : String(err))
error: sanitizeMongoError(lastError?.message || (err instanceof Error ? err.message : String(err)))
}
}
}