cdd0be328a
Critical runtime bugs:
- terminal.html WebSSH完全不可用(URL前缀/JSON解析/Content-Type三处错误)
- servers.py路由遮蔽:/logs被/{id}拦截,3个前端页面同步日志查询失败
- scripts.html startExecPoll()→startExecPolling(),长任务快速执行崩溃
- agent.py {value!r!s:.50}格式串非法,agent发非数值时ValueError
- alerts.html d.daily.reduce()无null检查,API返回空数据时TypeError
Resource leak / stability:
- websocket.py僵尸连接未关闭TCP,文件描述符泄漏
- websocket.py _last_alert_time字典无限增长(加1小时过期清理)
- asyncssh_pool.py全忙时超过MAX_CONNECTIONS无限增长
- self_monitor.py Telegram告警无冷却,宕机时每30秒刷屏
- schedule_runner.py一次性调度执行超60秒会重复触发
- 限速脚本EXPIRE每次重置窗口可绕过(改用Lua原子脚本)
Security:
- JWT access token加token_version声明,改密码后旧token立失效(零宽限)
- INSTALL_MODE导入时常量→动态函数,安装后JWT认证不再残留禁用
- install.py /lock端点加管理员存在性验证,防止阻断安装
- ServerUpdate schema移除connectivity只读字段,防止伪造连接状态
Frontend fixes:
- doExec()缺r.ok检查、commands.html null检查
- _server_to_dict()补last_checked_at+ssh_key_public
- _field_match()逗号cron表达式修复
- alerts类型显示、SSH会话名称、搜索高亮定位
- 一次性/循环定时任务(run_mode+fire_at+自动禁用)
Dead code removed (400+ lines):
- SyncService batch_push/_push_single等5个方法(零调用者)
- 5个未使用schema(SyncCommands/SyncConfig/SyncSftp/FileDeploy/PaginatedResponse)
- 6个零调用service方法、3个无前端API端点
- 4个未使用import
Schema migrations:
- push_schedules: run_mode + fire_at列,cron_expr改NULL
- servers: 7个新列 + ssh_key_private/public VARCHAR(500)→TEXT
Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com>
67 lines
2.5 KiB
Plaintext
67 lines
2.5 KiB
Plaintext
---
|
||
description: 安全/质量逐行走读审计 — Phase 2 closure 流程;禁止攻击面抽查冒充全量审计
|
||
globs:
|
||
- server/**
|
||
- web/app/**
|
||
- web/agent/**
|
||
- scripts/**
|
||
- deploy/**
|
||
- tests/**
|
||
---
|
||
|
||
# 逐行走读审计规则(Phase 2)
|
||
|
||
完整标准见:`standards/line-walk-audit-standard-v2.md`(权威)· Nexus SSOT:`docs/project/line-walk-audit-standard.md` · 转接索引:`docs/project/standards-transfer-package.md`
|
||
|
||
## 何时启用
|
||
|
||
用户要求「全量审计」「逐行审查」「走读」「Phase 2」「安全审计」时,**必须**遵守本规则,不得用攻击面 Top N 或子代理汇总代替。
|
||
|
||
## 强制流程(每文件 8 步)
|
||
|
||
1. 登记 `path`、语言、行数 N(`wc -l`)
|
||
2. **全文 Read** 至 EOF(可每 200 行分段;末段须覆盖 N)
|
||
3. 对该文件跑 `docs/project/line-walk-audit-standard.md` §4 全部适用规则 → 命中列表 H
|
||
4. 对 H **每一条** Read ±15 行,填 Closure(SAFE / FINDING + 行号 + 理由)
|
||
5. API/WS 文件:写入口表(方法、路径、鉴权)
|
||
6. 标外部输入 → sink(SQL / shell / 文件 / innerHTML / 出站 HTTP)
|
||
7. 八类归类:BUG / VULN / STYLE / RISK / PERF / UX / EXT / OPT
|
||
8. 满足 DoD 后标「逐行完成 ✓」
|
||
|
||
**单会话上限**:最多 **5 个文件** 完成 8 步。
|
||
|
||
## DoD(缺一不可)
|
||
|
||
- `len(H) == Closure 行数`(H=0 须写明「规则零命中」)
|
||
- Read 覆盖 `1..N`(报告写明 N 与 Read 范围)
|
||
- 每条 FINDING 含 **`文件:行号`**
|
||
- 交付 `docs/reports/audit-phase-2*-line-walk.md`(含 Closure **全表**,含 SAFE)
|
||
|
||
## 命令拼接(高频漏报)
|
||
|
||
- `f"{key}={shlex.quote(value)}"` **不等于**安全:须 `shlex.quote(f"{key}={value}")` 或 argv 不经 shell
|
||
- `ls`/`find` 输出拼进 `cp`/`rm` 须 **白名单 + shlex.quote**
|
||
- `exec_ssh_command` / `conn.run(command)` 默认经远程 shell
|
||
|
||
## 禁止
|
||
|
||
- 无行号的 FINDING
|
||
- 「已审计 ✓」无 Closure 表
|
||
- 单回复声称整库 `server/` 或全部 `web/` 完成
|
||
- 子代理只出 Top 15 不落行号
|
||
- 同一任务混审计与改代码(除非用户明确要求)
|
||
|
||
## 严重度(复查 KPI)
|
||
|
||
- **P0**:未授权 RCE、IDOR Shell、仓库内生产密钥等
|
||
- **P1**:需认证后的命令注入、XSS、密钥回读等
|
||
- P0 漏报 -100 / P1 漏报 -50(用户复查约定)
|
||
|
||
## 报告路径
|
||
|
||
| 用途 | 路径 |
|
||
|------|------|
|
||
| 标准 SSOT | `docs/project/line-walk-audit-standard.md` |
|
||
| 批次产出 | `docs/reports/audit-phase-2{a-f}-line-walk.md` |
|
||
| Phase 1 参考 | `.cursor/plans/nexus_全面代码审计_a33e6fc2.plan.md` §0–§8 |
|