项目当前运行正常、语法检查通过、核心接口健康;主要风险集中在单文件体量过大、root 运行、systemd unit 未 reload、前端内联复杂度与部分输入校验不足。
| 模块 | 路径/服务 | 说明 |
|---|---|---|
| 前端主页面 | /root/projects/www/sub/index.html/var/www/sub/index.html | 订阅、账号、资产、数据页入口;线上文件与源文件一致。 |
| 数据页 | /root/projects/www/sub/data.html | 数据中心/导出/日志视图。 |
| 后端 API | /root/projects/sub-api.js | Node 原生 HTTP + SQLite。 |
| 服务 | sub-api.service | 运行于 127.0.0.1:5211,Nginx 通过 /sub-api/ 代理。 |
| 检查项 | 结果 | 备注 |
|---|---|---|
后端 node --check | 通过 | sub-api.js 语法通过。 |
| 前端主页面脚本检查 | 通过 | index.html 内联 JS 可被 Node 解析。 |
| 数据页脚本检查 | 通过 | data.html 内联 JS 可被 Node 解析。 |
| 本地接口 | 通过 | service-categories、services、subscriptions、stats、accounts、virtual-assets、asset-categories、logs 均 200。 |
| 公网接口 | 通过 | virtual-assets、asset-categories、accounts、virtual_assets JSON/CSV 导出均 200。 |
| 浏览器自动化 | 未完成 | Hermes browser 工具访问该页仍 60 秒超时;curl/API/静态检查正常。 |
| 文件 | 行数 | 大小 | 评价 |
|---|---|---|---|
sub-api.js | 1179 | 61 KB | 单文件后端,功能集中,后续维护成本偏高。 |
www/sub/index.html | 2031 | 96 KB | HTML/CSS/JS 全内联,已接近需要拆分的体量。 |
www/sub/data.html | 269 | 14 KB | 体量可控。 |
| 检查 | 结果 |
|---|---|
| 服务数量 | 32 |
| 订阅数量 | 44 |
| 账号数量 | 23 |
| 虚拟资产数量 | 14 |
| 资产类别数量 | 14 |
| 订阅引用不存在服务 | 0 |
| 负价格订阅 | 0 |
| 资产无对应类别 | 0 |
| 负资产数量/估值 | 0 |
| 账号坏父级引用 | 0 |
| 级别 | 发现 | 证据 | 建议 |
|---|---|---|---|
| 高 | 服务以 root 用户运行。 | sub-api.service:User=root,WorkingDirectory 在 /root/projects。 | 迁移到低权限用户与 /opt/sub-api 或可遍历目录;数据库/备份目录单独授权。 |
| 中 | systemd unit 文件已变更但未 daemon-reload。 | systemctl 输出:sub-api.service changed on disk。 | 下次维护窗口执行 systemctl daemon-reload 并确认服务状态;若会重启 Hermes 无关,但仍建议先记录变更。 |
| 中 | 前端主页面单文件过大且内联 JS 函数多。 | index.html 2031 行,内联函数 122 个。 | 拆分为 sub.js、asset.js、account.js、sub.css;保留静态部署方式。 |
| 中 | 前端大量使用 innerHTML。 | 主页面 23 处、数据页 3 处。 | 目前多数拼接经过 escapeHtml,但建议把渲染 helper 标准化,禁止未转义字段进入 HTML。 |
| 中 | 资产日期格式校验不统一。 | 资产表可接受任意字符串;前端新增批量到期用 YYYYMMDD,单项保存也可能传 YYYYMMDD。 | 后端统一校验/归一化 YYYY-MM-DD 或 YYYYMMDD,避免排序和提醒逻辑漂移。 |
| 低 | 后端有多个空 catch。 | catch(e) {} 17 处,多用于迁移/兼容。 | 迁移类可保留,但建议至少注释原因或只吞掉已知错误码。 |
| 低 | 批量资产操作是前端逐项请求。 | P2 功能通过循环 PUT/DELETE 实现。 | 资产规模增大后可增加后端批量 API,减少部分成功/部分失败状态。 |
eval、new Function、前端 shell 调用。/sub/ 与 /sub-api/ 保留 IP allowlist,并对 API 加了 limit_req。?,未看到直接拼接用户输入执行 SQL 的明显模式。| 优先级 | 动作 | 收益 |
|---|---|---|
| P0.5 | 执行并验证 systemctl daemon-reload。 | 消除 unit 状态漂移,避免下次重启加载非预期版本。 |
| P1 | 后端迁移到低权限用户运行。 | 降低 Web/API 被打穿后的系统权限风险。 |
| P1 | 后端增加日期/数值统一校验。 | 提升订阅提醒、资产排序、统计稳定性。 |
| P2 | 拆分前端资产/账号/订阅模块。 | 降低继续迭代时误改概率。 |
| P2 | 增加批量 API 与事务。 | 减少批量操作部分失败,便于审计。 |
| P3 | 建立最小自动化冒烟测试。 | 每次修改后自动验证核心 GET、页面 token、JS syntax、数据完整性。 |
Sub 项目当前可用性健康,近期前端功能改造未引入语法级错误;下一步最值得做的是低权限运行、输入校验规范化和前端模块拆分。