shaw
0ddd58aaf9
feat(security): 操作审计日志 + 会话IP/UA绑定 + 敏感操作 step-up 2FA
应对管理员访问凭证失守导致的数据外泄风险,新增三层防护:
审计日志(admin-only 可见,用户不可见)
- 新增 append-only audit_logs 表(migration 180)+ 异步批量写入 + 保留期清理
- 审计中间件挂在 admin/user/auth/admin-payment 组认证之后:记录所有变更类
请求 + 白名单敏感读取(账号/代理导出、备份下载、admin/user API key 读取)
- 请求头凭证首尾掩码;请求体 JSON 递归脱敏(api_key/password 等擦除,base_url
保留以便追责);非 JSON body 不入库
- 无单条删除;全量清空需现场 TOTP 校验、拒绝 admin API key、未启用 2FA 不允许,
清空后同步写入留痕记录
会话 IP/UA 绑定(默认开启,可在系统设置关闭)
- JWT 携带 session id + IP/UA 指纹哈希;IP 或 UA 任一变化即撤销会话家族并要求
重新登录;旧 token 无指纹时放行以平滑升级
敏感操作 step-up 2FA(sudo 窗口 15 分钟)
- 账号/代理导出、DB 备份创建/下载、S3 目标修改要求近期 TOTP 二次验证;admin API
key 一律拒绝;前端 useStepUp 组合式 + TotpStepUpDialog 弹码后自动重试
- API key 查看按需求暂不加强管控
前端:新增 /admin/audit-logs 操作日志页面(筛选/详情/2FA 清空)、侧边栏入口、
step-up 弹窗接入导出与备份流程、安全设置项(绑定开关 + 日志保留天数)、zh/en i18n
2026-07-16 13:47:50 +08:00
..
2026-07-15 17:52:10 +08:00
2026-07-14 15:00:52 +08:00
2026-07-15 17:52:10 +08:00
2026-07-14 15:00:52 +08:00
2026-07-14 12:24:42 +08:00
2026-07-14 15:00:52 +08:00
2026-07-15 16:13:22 +08:00
2026-07-14 15:00:52 +08:00
2026-07-14 15:00:52 +08:00
2026-07-14 15:00:52 +08:00
2026-07-14 15:00:52 +08:00
2026-07-14 15:00:52 +08:00
2026-07-01 12:21:45 +08:00
2026-07-15 23:58:46 +08:00
2026-07-01 12:21:45 +08:00
2026-07-01 12:21:45 +08:00
2026-03-04 15:22:46 +08:00
2026-07-15 23:58:46 +08:00
2026-07-15 23:58:46 +08:00
2026-05-27 18:00:45 +08:00
2026-07-10 15:16:09 +08:00
2026-07-15 10:51:13 +08:00
2026-05-03 20:33:13 +08:00
2026-04-09 18:14:28 +08:00
2026-04-09 18:14:28 +08:00
2026-02-11 01:23:21 +08:00
2026-04-27 16:47:44 +08:00
2026-04-27 16:47:44 +08:00
2026-07-16 13:47:50 +08:00
2026-03-16 20:22:10 +08:00
2026-07-14 15:00:52 +08:00
2026-05-19 20:32:32 +08:00
2026-07-15 09:35:34 -07:00
2026-07-14 12:24:42 +08:00
2026-07-14 12:24:42 +08:00
2026-06-10 14:16:51 +08:00
2026-06-12 01:47:01 +08:00
2026-03-11 16:46:58 +08:00
2026-03-17 19:26:30 +08:00
2026-07-10 11:43:44 +08:00
2026-07-10 11:43:44 +08:00
2026-03-17 19:26:11 +08:00
2026-03-17 19:26:11 +08:00
2026-02-28 15:01:20 +08:00
2026-02-28 15:05:54 +08:00
2026-02-10 11:42:39 +08:00
2026-02-24 20:04:05 +08:00
2026-07-15 16:11:28 +08:00
2026-07-14 12:45:03 +08:00
2026-07-14 15:00:52 +08:00
2026-07-15 20:30:23 +08:00
2026-07-15 09:40:08 +08:00
2026-07-13 09:54:51 +08:00
2026-03-04 15:22:46 +08:00
2026-03-04 13:45:49 +08:00
2026-02-23 12:45:37 +08:00
2026-07-15 10:51:13 +08:00
2026-07-01 12:21:45 +08:00
2026-07-13 17:55:01 +08:00
2026-06-08 00:01:30 +08:00
2026-02-12 14:20:14 +08:00
2026-07-14 14:55:30 +08:00
2026-07-02 20:04:47 +00:00
2026-02-12 16:27:29 +08:00
2026-02-12 16:27:29 +08:00
2026-03-04 13:45:49 +08:00
2026-07-14 01:29:46 +08:00
2026-07-14 01:29:46 +08:00
2026-07-14 01:29:30 +08:00
2026-06-25 16:23:45 +08:00
2026-06-30 10:19:50 +08:00
2026-06-18 23:07:25 +08:00
2026-04-09 18:14:28 +08:00
2026-06-08 00:01:30 +08:00
2026-06-08 00:01:30 +08:00
2026-04-09 18:14:28 +08:00
2026-05-19 15:53:28 +08:00
2026-05-20 16:08:41 +08:00
2026-03-08 06:59:53 +08:00
2026-02-07 19:46:42 +08:00
2026-07-16 00:40:46 +08:00
2026-07-16 00:40:46 +08:00
2026-06-26 16:19:41 +08:00
2026-05-19 15:27:47 +08:00
2026-07-09 10:03:49 +08:00
2026-05-26 10:49:20 +08:00
2026-07-08 08:49:22 +08:00
2026-07-16 13:47:50 +08:00
2026-07-16 13:47:50 +08:00
2026-03-11 16:46:58 +08:00
2026-03-11 16:46:58 +08:00
2026-07-01 22:19:21 +08:00
2026-07-09 22:30:04 +08:00
2026-07-09 22:30:04 +08:00
2026-03-27 14:33:05 +08:00
2026-02-28 15:01:20 +08:00
2026-04-09 19:25:08 +08:00
2026-05-30 17:52:18 +08:00
2026-04-09 18:14:28 +08:00
2026-05-30 18:56:08 +08:00
2026-05-30 18:56:08 +08:00
2026-05-30 18:56:08 +08:00
2026-03-04 13:45:49 +08:00
2026-05-26 10:49:20 +08:00
2026-05-30 17:52:18 +08:00
2026-06-08 22:54:01 +08:00
2026-07-09 20:06:09 +08:00
2026-06-29 09:40:04 +08:00
2026-05-26 10:49:20 +08:00