qing
00ce3eac6a
fix(waf): 修复P3安全审计缺陷
...
P3-1: logclient 复用 TCP 长连接,失败时重建,消除 TIME_WAIT 堆积
P3-2: TLS 显式限定 CipherSuites + CurvePreferences,排除弱加密套件
P3-3: CheckInput query 编码改用 url.Parse + Query().Encode()
修复率 76% -> 94%(P3 全部清零,仅剩 P0-3 为设计依赖)
2026-08-08 02:39:22 +08:00
qing
dd9f8e51ff
fix(waf): 修复P1/P2安全审计缺陷
...
P1-1: IPv6 地址解析改用 net.SplitHostPort,修复 XFF 带方括号致限流失效
P1-2: 捕获 ProcessResponseHeaders 返回值,命中记录 WARNING 告警
P1-4: 新增 SIGINT/SIGTERM 优雅关闭 + logclient.Flush()
P1-5: 标准日志输出到 stderr,保留 panic 堆栈
P2-1: 规则文件加载前校验大小(1 MiB 上限)防 OOM
P2-2: logclient db 地址支持 LOG_DB_ADDR 环境变量
P2-5: 日志失败输出到 stderr 而非 stdout
修复率 35% -> 76%(P1/P2 全部清零)
2026-08-08 02:36:22 +08:00
qing
bcec529761
fix(static): 第2轮审计修复12项安全缺陷
...
修复 P1 路径遍历前缀 bypass、代理错误信息泄露、大文件 OOM、邮箱枚举与 CORS 通配;P2 Range 边界、hash 参数校验、db 连接复用、favicon 端口校验、日志批丢、端口解析异常。CSP/SSL 标记为已知限制。审计文档同步更新,修复率 36% → 88%。
2026-08-08 02:21:08 +08:00
qing
1ed48a1f48
build(db2,dnfs2): 补齐 Dockerfile 支持容器化部署
...
- db2/Dockerfile: 多阶段构建(libmsg+db2),含 schema 初始化 entrypoint
- dnfs2/Dockerfile: 多阶段构建(libhttp+libmsg+dnfs2),curl 健康检查
- .dockerignore: 豁免 libhttp/libmsg 供 C++ 服务构建
两者均基于 ubuntu:24.04(boost 1.83 含 json.hpp),可平替 Python 版
2026-08-08 01:59:48 +08:00
qing
40bc0ad5c7
docs(readme): 补充未记录模块 db2/dnfs2/redirect80/BotOps/lci
...
- redirect80: HTTP→HTTPS 重定向服务,补充至架构图/服务表/端口表/启动顺序
- db2/dnfs2: db/dnfs 的 C++20 重实现,补充详细章节
- BotOps: aibox 智能体 TUI 前端,补充详细章节
- lci: 嵌入式帧缓冲图形界面(仅记录该功能)
- 同步更新多语言异构列表与安装顺序
2026-08-08 01:59:14 +08:00
qing
2e0805eb05
fix(dnfs2): 第2轮审计修复 db 错误处理不一致
...
- P2-N6: _note_exists db 业务错误误判为节点不存在,改抛 500
- P2-N7: delete_note/update_note 所有权检查分离 db 错误(500)和节点不存在(404)
- P3-N8: CONFS_PORT 添加 [1,65535] 范围校验
- P3-N9: main() 添加 curl_global_cleanup,配对 curl_global_init
- 更新审计文档为第 2 轮,评级 A- → A
2026-08-08 01:44:04 +08:00
qing
117fc0241e
fix(libhttp,dnfs2): HttpClient 新增超时接口,dnfs2 启用配置超时
...
修复 dnfs2 审计 L-3(P2-N5):
libhttp HttpClient 硬编码 CURLOPT_TIMEOUT=30L/CONNECTTIMEOUT=10L,
dnfs2 的 gateway_timeout/review_timeout 配置加载后从未使用,实际超时恒为 30s。
修复:
- libhttp HttpClient 新增 set_timeout/set_connect_timeout 接口
(默认 30s/10s,向后兼容 gateway/core)
- request_stream_sync 使用成员变量替代硬编码值
- dnfs2 decode_token 设置 gateway_timeout
- dnfs2 review_content 设置 review_timeout
安全评级 A- → A,已知限制 6→5 项。
2026-08-08 01:33:57 +08:00
qing
9804838e96
feat(dnfs2): C++20 重实现 dnfs,修复全部 P0/P1 + 审计新发现 4 项
...
dnfs2 基于 libhttp + libmsg + boost::json 重写 Python dnfs,接口完全兼容:
- 4 个路由 (get_notes/add_note/delete_note/update_note) + 特殊节点 (link/js/image/file)
- Token 验签经 gateway /whoami (fail-closed 503)
- AI 内容审核 fail-closed
- AsyncQueue 异步日志 → db2 Logs 表
- 安全响应头 (CSP/X-Frame-Options 等)
修复 dnfs 继承的 6 项 P0/P1:
- P0-4 统一 _call_db() 检查 success 后再访问 data
- P1-6 setMaxBodySize(10MB)
- P1-7 日志客户端复用主配置
- P1-8 update_note pid≠0 校验父节点存在
- P1-9 RpcClient retry_on_refused=true
- P1-11 note_id 显式 as_int64() + 类型校验
审计新发现并修复 4 项:
- P1-N1 stop_watcher detach 改 join,修复 use-after-free (CWE-416)
- P1-N2 main() 添加 curl_global_init,修复多线程首次 curl_easy_init 竞态 (CWE-362)
- P2-N3 delete_note 分离 db 错误(500) 和子节点检查(400)
- P2-N4 threads 上限 256,对齐项目约定
安全评级 A-,6 项已知限制已记录。
2026-08-08 01:26:55 +08:00
qing
e815f0ec40
fix(gateway,libhttp): 修复进程无法退出bug,完成P0安全问题修复
...
安全修复(P0):
- 修复4处错误消息泄露内部步骤问题,替换为用户友好文案
- 修正拼写错误 "Registe" -> "Registration"
- 修正注册失败HTTP状态码 400 -> 500
- 所有P0严重问题100%修复,安全评级提升至A-
稳定性修复(关键):
- 修复信号处理非async-signal-safe问题:仅设置原子标志,杜绝死锁
- 新增SIGPIPE忽略处理,防止写关闭socket时进程意外终止
- 修复Listener::doAccept()关闭后无限递归导致CPU 100%空转bug
- 新增Listener::close()方法,stop()先关闭acceptor再停止ioc
- 改进stop()流程:acceptor->WS客户端->ioc->worker线程 有序关闭
- 新增双重超时保护:stop() 8秒、日志flush 3秒,超时强制exit保证进程绝不挂死
- 服务器事件循环改为独立线程运行,主线程负责信号检测和关闭协调
文档:
- 新增CHANGELOG.md更新日志
- 更新gateway安全审计文档,添加稳定性修复记录
- 更新docs/INDEX.md文档索引
2026-08-07 23:07:35 +08:00
qing
b33c5e6d1d
fix(gateway): 修复P0安全问题,错误消息脱敏
...
- 将4处暴露内部处理步骤的错误消息替换为用户友好文案
- 修正拼写错误 "Registe" -> "Registration"
- 修正注册失败HTTP状态码 400 -> 500
- 更新安全审计文档至2026-08-07版本
- P0严重问题全部修复,安全评级提升至A-
修复内容:
- "Login (Query Step) Failed" -> "Login failed, please try again later"
- "Login (Update Step) Failed" -> "Login failed, please try again later"
- "Registe Failed" -> "Registration failed, please try again later"
- "Reset Failed" -> "Password reset failed, please try again later"
2026-08-07 22:53:26 +08:00
qing
edbb7ef1c6
fix(db2): 修复第六轮审计定位的 4 个问题并更新审计文档
...
- ND-1(P2): start() 引入 CleanupGuard RAII 守卫,rpc.start() 异常路径
下清理线程被优雅回收,消除 std::terminate 硬崩溃
- ND-4(P3): where/limit/offset 类型不符立即抛错,不再静默忽略
- ND-5(P3): _bind_value 对超 INT64_MAX 的 uint64 抛错,防截断溢出
- ND-6(P3): in 运算符非数组值抛错,仅空数组保留恒假语义
- 记录 2 项已知限制 ND-2/ND-3(无结果集上限、无 WHERE 全表更新/删除)
审计文档更新至 26/26(100%) 修复、30 项安全机制;clang++/g++ 双编译验证通过
2026-08-07 21:42:06 +08:00
qing
3ace5931e6
fix(db2): security audit round 5 - fix all remaining P3 issues
...
- P3-7: replace gmtime() with thread-safe gmtime_r() in utc_now()
- P3-9: validate columns array elements are strings before as_string()
- P3-10: use sqlite3_close_v2() instead of sqlite3_close() in DbConn dtor
- P3-11: introduce safe_stoi() helper wrapping all 9 std::stoi call sites
with field-name-aware error messages
- P3-12: log _log_internal exceptions to stderr instead of silent swallow
- P3-13: log _do_cleanup COUNT prepare failures to stderr; simplify
finalize to single exit point
- P3-14: reject invalid order_by elements (non-object, missing column)
instead of silently skipping
- P3-15: reject non-string action field instead of defaulting to "select"
- P3-16: validate order_by column is string and desc is boolean
All 22 audit issues now resolved (100%).
2026-08-07 21:33:13 +08:00
qing
e2f05f9a43
fix(libmsg): security audit round 4 - eliminate residual race + atomic server_fd
...
- P1-3: introduce ConnectionLock (mutex + atomic active) to close the residual
CWE-362 race where _remove_client closes fd before reply/broadcast acquires
the lock; senders now check active after locking and abort if fd was closed
- P2-7: make _server_fd std::atomic<int> to remove the data-race UB between
stop() and _event_loop
- P2-8: validate on_message is non-null in MsgServer::start()
- P3-2: distinguish missing _route vs wrong-typed _route in RpcServer
- P3-3: set TCP_NODELAY/SO_SNDTIMEO before registering fd in _clients
- doc: add SO_SNDTIMEO precondition note to pmsg_send
2026-08-07 21:27:05 +08:00
qing
63c22a3d60
fix(libmsg): security audit round 3 - add server send timeout + harden RPC validation
2026-08-07 21:13:14 +08:00
qing
3c50a862d3
fix(libmsg): complete security audit round 2 - fix P0 race + harden input validation
...
- P0: fix _close_all_clients() race condition (CWE-362) - hold per-connection send_lock
before close() to prevent messages being sent to wrong client after fd reuse
- P2: add comprehensive input validation for all public APIs
(timeout/port/workers/max_connections/batch_size etc. bounds checking)
- P2: add UTF-8 payload validation (isValidUtf8) aligning with Python pymsg behavior,
rejecting overlong encodings, surrogate pairs, truncated/invalid sequences
- P2: document pmsg_recv(int) precondition and recommend deadline mode
- add constructor validation for MsgClient/MsgServer/AsyncQueue/RpcClient/RpcServer
- add add_route() validation for empty route name and null handler
- update security audit report with round 2 findings and fixes (8 issues total, 100% fixed)
2026-08-07 21:01:34 +08:00
qing
9256a8157b
fix(db2): add numeric config range validation (fix P2-3/P3-8)
...
- Add range checks in load_config() for all numeric config values:
* listen_port: 1-65535
* workers: >= 1
* cleanup_interval: >= 1 (prevents busy loop DoS when misconfigured to 0/negative)
* retention_days: >= 0
* max_records: >= 1
- Fix unused lambda capture 'this' in RpcServer error handler
(-Wunused-lambda-capture with -Wall -Werror)
- Update security audit doc: mark P2-3/P3-8 fixed, mark production ready
Verified: g++ -std=c++20 -O3 -Wall -Werror compiles with zero warnings.
2026-08-07 20:48:22 +08:00
qing
761cfd4987
fix(db2): 修复剩余P3问题(limit/offset负值、WHERE/IN规模上限)
...
- limit/offset 增加非负校验
- WHERE 条件数上限 64,单个 IN 元素上限 1000
- 审计文档:11/11 问题全部修复
2026-08-07 07:46:46 +00:00
qing
2f7a99c2a4
fix(db2): schema缓存基于schema_version自动失效,更新审计文档
...
- 缓存项携带 PRAGMA schema_version,DDL变更后自动重新反射
- 修复P3-1低危问题,剩余未修复P3问题降至2项
2026-08-07 07:26:29 +00:00
qing
176fb13908
fix(db2): 修复空values和未知运算符问题,更新审计文档
...
P3-5: INSERT/UPDATE 空 values 前置校验,不再生成无效 SQL
P3-6: 未知 WHERE 运算符立即报错,不再静默跳过
审计文档:新增并发性分析章节,更新进度至 8/11 已修复
剩余 3 项 P3(schema缓存失效、limit负值、条件数上限)待后续迭代
2026-08-07 07:07:55 +00:00
qing
ec626dc8d5
fix(db2): 修复清理时间戳格式偏差,增加配置完整性校验
...
P2-1: 清理 SQL 改用 strftime 统一 T 分隔格式,消除保留期约 1 天偏移
P2-2: load_config 对 7 个必需字段做必填校验,缺失则 exit(1)
审计进度:已修复 6/9(P0×2 P1×1 P2×2 P3×1),剩余 3 项 P3
2026-08-07 06:55:31 +00:00
qing
c45e2e13f4
refactor(static): 首页统一 1024px 版心,特性网格改为 2×2 等宽布局
...
- 新增 .wrap 统一版心,头部胶囊、特性、关于、CTA、页脚全部对齐同一内容栏
- 特性卡片由 Bento 跨列网格改为 2×2 等宽,取消旋转装饰
- 关于面板改为居中排版,数据行移至底部横排
- 章节间距统一由 .section 控制,移动端断点适配同步收敛
2026-08-07 06:04:15 +00:00
qing
f3ba13a6b9
fix(static): 特效节点全屏 iframe 改挂 body,修复被后续卡片盖住
...
全屏特效 iframe 原挂载在卡片容器内,卡片入场动画的 opacity<1 会在
卡片上产生层叠上下文,iframe 的 z-index:9999 被困在卡片内部生效,
DOM 序靠后的兄弟卡片把整张卡片(含特效)压在下面。改为全屏特效
直接挂载 document.body,z-index 在根层叠上下文竞争;in-node 特效
保持挂在卡片内。清理路径(clearAllEffects 全文档按 class 查找)
不受影响。
2026-08-07 05:40:28 +00:00
qing
74aaa668ce
Merge branch 'main' of https://git.cancerai.top/qing/blackbird
2026-08-07 05:03:33 +00:00
qing
46c1fdd914
feat(static): 首页新增 Bento 特性卡、CTA 横幅与品牌页脚
...
- 特性区改 Bento 网格(首尾卡跨两列)并加底部标签胶囊
- 关于区改左文右数据面板,移动端转竖排横数据
- 新增结尾品牌渐变 CTA 横幅(含深色模式适配)
- 页脚重构为品牌+导航+备案三段
- CTA 按钮改 data-cta 多按钮绑定,渐显目标同步补全
2026-08-07 05:02:35 +00:00
qing
8a661291c0
chore(db2): 从索引移除 build/db2,交由 .gitignore 忽略
2026-08-07 04:57:53 +00:00
qing
e2b99529fc
chore(db2): 添加 .gitignore,忽略 build/ 与编译产物
2026-08-07 04:56:34 +00:00
qing
9676e5cacb
docs(readme): 补充 libmsg 到共享基础库表格
2026-08-07 02:26:12 +00:00
qing
5dc8956b55
fix(gateway): implement dual-track token revocation mechanism (P0-1)
...
Add thread-safe in-memory token revocation to fix the critical issue
where logged-out or password-reset tokens remain valid until expiry.
- Add jti (uuid v4) to all issued tokens for single-token revocation
- Add per-user version number for bulk revocation on password reset
- Add jti blacklist with TTL-based auto-cleanup to prevent memory leaks
- Introduce unified verify_token() replacing 4 copies of inline logic
- Refactor all handlers (login/logout/refresh/reset_password/proxy/whoami/
admin_verify/ws_admin) to use the new verification pipeline
- Refresh token now revokes old jti (prevents replay after refresh)
- Bump version to 0.8.0
2026-08-07 02:35:08 +08:00
qing
daf4bbe6c2
docs(index): 补充 db2 审计报告与 README 索引
2026-08-06 18:26:12 +00:00
qing
00421182e4
fix(db2): 按 JSON 类型分别绑定 SQLite 参数,修复类型丢失
...
- _coerce_value 改为返回 json::value,保留 int/double/bool/null 原始类型
- 新增 _bind_value,按类型调用 sqlite3_bind_int64/double/text/null
- WhereClause::params 改为 vector<json::value>,删除 is_null 向量
- INSERT/UPDATE/SELECT/DELETE 统一使用按类型绑定
修复 P1-1(所有值绑定为 TEXT)和 P3-2(_coerce_value null 处理误导)
2026-08-06 18:23:30 +00:00
qing
cb31db1078
docs(security): 更新 libsqlite3 审计报告修复状态
...
- P0-3 参数化 exec 已修复
- P1-2/P1-3/P1-4 绑定类型与异常信息已修复
- P2-2/P2-3 读取接口与文档已修复
- 修正 P2 问题数量统计(6 项而非 5 项)
2026-08-06 18:14:01 +00:00
qing
48714b88af
fix(libsqlite3): 增加参数化 exec 与完整绑定/读取接口
...
- 新增模板 exec(sql, args...) 参数化执行,支持 int / int64_t / double /
std::string / const char* / nullptr / std::vector<unsigned char>
- 扩展 Sqlite3_stmt:bind_int64、bind_double、bind_blob、bind_null、execute
- 增加 read_int64、read_double,read_text 补充生命周期注释
- 构造/打开异常携带 sqlite3_errmsg 详情
- 原 exec(sql) 增加硬编码 SQL 警告注释
2026-08-06 18:13:52 +00:00
qing
1c55443d43
docs(security): 新增 libsqlite3 安全审计报告
...
- 记录 P0/P1/P2 级别问题与修复状态
- 已修复 double free / 移动语义、close_v2、const 引用等 5 项问题
2026-08-06 18:07:14 +00:00
qing
985ff47c84
fix(libsqlite3): 修复 double free 与移动语义缺陷
...
- 为 Sqlite3 与 Sqlite3_stmt 显式 delete 拷贝、实现 noexcept 移动构造/赋值
- 析构函数判空后释放,防止重复释放与 use-after-free
- ~Sqlite3() 改用 sqlite3_close_v2,确保所有 statement 释放后再关闭
- stmt() 参数改为 const std::string&,支持字符串字面量
- 成员指针显式初始化为 nullptr,errMsg 初始化为 nullptr
2026-08-06 18:07:06 +00:00
qing
b781a8d2fe
fix(static): 修复特效节点全屏 iframe 被卡片 transform 困住的问题
...
卡片入场动画的 translateY 使卡片成为 position:fixed 后代的包含块,
全屏特效 iframe 被限制在卡片内渲染,表现为部分特效不自动启动
(in-node 特效为 relative 定位不受影响)。卡片入场改为纯 opacity 淡入;
带位移的 rise-in 仅用于无 fixed 后代的骨架元素,并排除依赖
transform 垂直居中的 .minimap。
2026-08-06 17:49:15 +00:00
qing
fad749f9aa
docs(db2): 添加 README
2026-08-06 17:42:50 +00:00
qing
577386bff2
feat(static): 同步美化注册/找回密码/树状笔记页
...
- 新增 auth.css:表单页共享美化(点阵背景、品牌渐变顶条卡片、eyebrow 标题、
渐变提交按钮、入场动画),register/forgot 各加一行 link 与 eyebrow
- 新增 dnfs.css:笔记页美化(顶部底纹暖光、卡片逐张入场、编辑卡聚焦光环);
顺带修复节点编辑卡裸 <button> 无主题底色的问题
- 动效均遵循 prefers-reduced-motion,颜色全部消费 theme.css 变量
2026-08-06 17:42:38 +00:00
qing
6150c60441
chore: .gitignore 忽略 venv/.env 虚拟环境、build 产物与 waf 证书
2026-08-06 17:42:17 +00:00
qing
1970f3f824
feat(db2): C++20 数据库 RPC 服务,对齐 Python db 模块 execute 路由
...
- 完整实现 execute 路由(select/insert/update/delete)
- 相同 where 语法(eq/ne/gt/lt/ge/le/like/in)及响应格式
- 启动时从 confs 拉取 db.ini,支持环境变量和命令行覆盖
- per-thread SQLite 连接 + WAL/mmap/busy_timeout PRAGMA
- PRAGMA table_info 驱动的列类型反射与缓存
- $now 哨兵值自动替换为 UTC 时间
- 内置 Logs 表自动建表 + 后台清理线程(retention_days + max_records)
- 表名白名单校验防 SQL 注入
- gateway DbC::call_msg() 零改动可直接切换
2026-08-06 17:40:07 +00:00
qing
49ed3f738f
fix(deploy): _inst.sh 补全 ai_review/aibox/redirect80; ai_review 模型走 ModelScope 镜像
...
- _inst.sh: 补入遗漏的 3 个模块(confs 之后、core 之前)
- ai_review/_fetch_onnx_model.sh: 新增 chromadb onnx 模型预下载脚本
(默认 ModelScope 镜像,支持 ONNX_MODEL_BASE_URL/CHROMA_CACHE_DIR 覆盖,
断点续传+幂等,绕过 chromadb 写死的 AWS S3 下载)
- ai_review/_set.sh: 安装后自动调用模型下载
- README.md: 更新部署说明
- docs/reviews/DEPLOY_DEFECT_AUDIT_20260806.md: 新增部署缺陷审查报告
- docs/INDEX.md: 登记审查报告
2026-08-06 17:39:42 +00:00
qing
ea2717c400
feat(static): 优化社区首页美观度与高级感
...
- index.html: hero 新增品牌徽章、节点树装饰 SVG、下滑提示;章节增加 eyebrow 小标题
- index.css: 主按钮渐变+扫光、卡片序号水印+图标点亮、标题渐变流光、点阵底纹、
品牌树描绘动画、关于卡装饰、胶囊快捷链接;全部基于 theme.css 变量,深浅色自适应
- index.js: 追加滚动渐显(IntersectionObserver)与特性卡片光标光斑,与登录逻辑解耦
2026-08-06 17:31:40 +00:00
qing
a4611ec737
docs(security): 新增 libmsg 安全审计报告,更新文档索引
...
新增 docs/security/libmsg_SECURITY_AUDIT_20260806.md,记录 SAST
扫描发现的 3 个漏洞(CWE-362/400/209)及对应修复方案,更新
docs/INDEX.md 加入 libmsg 审计文档入口。
2026-08-06 17:18:27 +00:00
qing
e92ef05ed0
fix(libmsg): 修复安全审计发现的三个漏洞
...
- CWE-362: _remove_client() 关闭 fd 前获取 per-connection send_lock,
防止 broadcast/reply 向 OS 复用的 fd 发送数据到错误客户端
- CWE-400: workers>0 模式下消息接收移至 worker 线程,
事件循环不再阻塞 pmsg_recv,防 Slowloris DoS
- CWE-209: 扩展 _sanitize_error 路径正则为 /\S+,
覆盖含空格/括号/@/~ 等特殊字符的内部路径,防信息泄露
2026-08-06 17:16:33 +00:00
qing
61a0e4cf7a
Merge remote-tracking branch 'origin/main'
2026-08-07 00:38:13 +08:00
qing
1d44e0dcb8
feat(libmsg): add pymsg C++ library with AsyncQueue, MsgServer, and JSON RPC layer
...
- Add libmsg module: pymsg protocol implementation (4-byte BE length prefix + UTF-8)
- Add AsyncQueue<T>: generic async batch queue with backpressure (aligned with Python AsyncRpcQueue)
- Add MsgServer: select-based multi-client TCP server with optional thread pool
- Add RpcClient/RpcServer: JSON RPC convention layer with automatic route injection
- Refactor gateway/LogC.hpp to use AsyncQueue for async batch log delivery
- Update gateway/DbC.hpp to add call_msg() using pymsg TCP protocol
- Remove duplicated gateway/inc/Msg.hpp (now provided by libmsg)
- Update gateway/Makefile and _inst.sh build order
Fixes included:
- pmsg_send size check uses kMaxMsgSize (64MiB) instead of 4GiB
- MsgClient._running uses std::atomic<bool> for thread safety
- Deadline-based recv timeout to prevent Slowloris (header+payload shared deadline)
2026-08-06 23:48:06 +08:00
qing
7f288f1c09
docs(security): 修正安全审计文档与代码不一致
...
- core: MQ kill/exec 实际未禁用,修正错误声明;HttpTask.cpp 行号 L53→L58
- gateway: 更新 20+ 处行号偏移(_KEYGEN/handleProxy/is_safe_target 等)
- aibox: shell=True 4处→3处,handle_connection/WebSocket 行号更新
- DEPS: WebSocketServer.cpp 已删除,fuzz 需求转移至 HttpServer_WsSession
- 加固计划: Phase 1.1 (127.0.0.1 绑定) 标记为已完成
- captcha/libhttp: 修正轻微行号偏移
2026-08-06 15:25:07 +00:00
qing
7ff73b7d07
fix(aibox): 缩短 WebSocket 心跳间隔并补全直连页面心跳
...
前置代理(Nginx/CDN)的 proxy_read_timeout 约 20s,原 25s 心跳
无法在超时前到达,导致连接被代理切断。aibox.js 心跳从 25s 缩短至
10s;frontend.html 直连页面此前完全无心跳,新增 10s 应用层心跳。
2026-08-06 09:16:34 +00:00
qing
bcb1d5d557
fix(dnfs): 切换特效模式时立即生效当前页面特效节点
...
从"无特效模式"切回"特效模式"时,renderSpJs 的自动执行判断
仅在卡片首次渲染时执行一次,不会重新触发。现在切换后
重新渲染当前层卡片,使特效节点按新状态立即生效或停止。
2026-08-06 09:03:44 +00:00
qing
786509f2e2
Merge branch 'main' of https://gitcode.com/qingss0/blackbord
2026-08-06 16:19:04 +08:00
qing
fc351f569a
fix(aibox): 禁用 websockets 服务端 20s 协议层 ping 超时断连 (ping_interval=None)
2026-08-06 16:16:12 +08:00
qing
490b974ca6
爪手3D打印
2026-08-06 09:17:33 +08:00
qing
46a5959bb1
docs: 更新 README 标题为 blackbird
2026-08-05 16:53:37 +08:00
qing
5a8ac61502
fix: 更新 gateway 管理员白名单并修复 fix_orphan_notes 脚本
...
- confs/configs/gateway.ini: 管理员账号从 qing@qsont.me ;shufeng@qsont.me 更新为 1776177662@qq.com ;277665039@qq.com
- db/fix_orphan_notes.py: 修复 _sys.path 笔误为 sys.path,补充文件末尾换行
2026-08-05 16:38:39 +08:00
qing
6483719551
docs(dnfs): 同步 README 至审计 08-03 验证后的真实状态
...
- 主干: Token 改为委托 gateway /whoami 验签描述
- 已知问题: 标注 P0 #1/#3、P1 #5/#10 已修复,P0 #2 基本修复,其余未修复项保留
2026-08-05 16:34:34 +08:00
qing
9c73d70582
docs(gateway): 标注旧哈希自动迁移已被注释禁用
...
README 安全特性中"旧哈希自动迁移"实际在 main.cpp L1102-1109 被注释,标注其当前未生效。
2026-08-05 16:29:29 +08:00
qing
0348b959bb
docs: 同步 static 与 waf README 至审计后真实状态
...
- static: 移除/标注已禁用的 reset_password 与 yhdet 系列路由,更新 check_user 为经 db 服务查询,补充代理路由 CORS 通配例外说明
- waf: 明确 CRS 需先 _fetch_crs.sh 才生效,未拉取时 WAF 开箱无拦截能力
2026-08-05 16:26:23 +08:00
qing
63b5243faf
style(index): 首页移动端响应式优化
...
触屏加大可点目标,平板/手机收敛光晕与留白,超小屏进一步紧凑排版。
2026-08-05 10:48:09 +08:00
qing
1b6a767f62
feat(dnfs): 节点卡片仅标题可点击进入子节点
...
将进入子节点的点击事件从整张卡片收窄到标题 h3,内容/统计/操作区不再触发
跳转;同步 theme.css 将手型光标与 hover 高亮集中在标题上。
2026-08-05 10:48:09 +08:00
qing
7f6f077469
feat(dnfs): support in-node rendering for frontend code nodes
2026-08-05 10:30:29 +08:00
qing
60db2c40d8
特效保持全屏视觉,但 iframe 元素挂载到节点容器内
2026-08-05 10:15:21 +08:00
qing
08aff2656d
前端特效节点改为在节点容器内展示,不再全屏铺底
2026-08-05 10:12:47 +08:00
qing
c059589e94
style(dnfs): 首页进一步美化,光晕氛围与卡片细节
2026-08-05 10:01:17 +08:00
qing
d1e4b5b01a
style(dnfs): 打磨首页 index 视觉细节,保持朴素风格
2026-08-05 09:25:43 +08:00
qing
897e76fd8f
style(dnfs): 移除左侧用户面板按钮的 emoji 表情,保持文字简洁
2026-08-05 02:02:00 +08:00
qing
ac2677abc7
feat(dnfs): 顶部搜索框卡片化美化,整体视觉和谐统一
...
- dnfs.html:去掉内联样式,重构为「放大镜图标 + 输入框 + 搜索按钮」结构;按钮改 <button> 避免意外提交
- theme.css:新增 .searchbox 胶囊卡片样式,与 .card/.userpanel 统一设计语言(圆角 20px、
半透明卡片底色、浅阴影、1px 细边、橙色主按钮)
- focus-within 态:边框变橙 + 图标变橙 + 发光阴影,焦点反馈清晰
- 输入框无边框全透明,视觉焦点集中在胶囊容器
- 480px 以下移动端缩紧内边距与字号
2026-08-05 01:58:55 +08:00
qing
d680dcd058
fix: 修复 WebSocket 长连接空闲断线问题
...
三处协同修复:
1. 前端 aibox.js 添加 25s 心跳(ping),防止 gateway 30s 空闲超时
2. gateway libhttp doWsRead 对 WS 代理连接跳过空闲超时
3. aibox.py _handle_tool_calls 启动 drain 线程实时排空输出队列,
避免 SubAgent 等长时间工具执行期间前端收不到数据
2026-08-05 01:58:19 +08:00
qing
84a1a5e3be
feat(dnfs): 顶部搜索框实时过滤当前层节点卡片
...
- 抽取 renderCards() 复用卡片渲染,load_notes 保存 current_children
- 卡片绑定 __item 引用,搜索时直接切换 .style.display(不重建 DOM、不清特效)
- 按 title/owner/content 子串匹配;信封节点链接/代码/文件名纳入搜索,排除图片/文件的 base64 数据
- 支持实时 input 过滤、回车触发、ESC 清空;无匹配时显示提示
- 切换/返回节点时自动清空搜索关键词
2026-08-05 01:52:52 +08:00
qing
058eb11f5f
docs(aibox): 更新 README 补充 express_emotion 工具与 /search 命令(移除过时说明、命令表新增 /search、工具表新增 express_emotion、消息类型表补充 task_list/task_completed、更新日志新增 v2.8)
2026-08-05 01:51:10 +08:00
qing
85c9699758
feat(dnfs): 用户面板折叠时不再显示用户名,仅显示展开按钮
2026-08-05 01:42:51 +08:00
qing
9dd16e0eef
feat(dnfs): 进入新节点时先清除上一节点特效再加载当前节点特效
2026-08-05 01:29:49 +08:00
qing
28894e48dc
feat(dnfs): 用户面板下移并新增无特效模式开关;管理员增加运维机器人/进程管理器入口
2026-08-05 00:49:30 +08:00
qing
924c718005
fix(waf): WebSocket 劫持后清除 http.Server 读写 deadline,避免长连接被强制断开
2026-08-05 00:37:11 +08:00
qing
d71f526af4
feat(aibox): 子代理思考过程实时输出到主对话侧栏
...
- run_full_subagent 新增 output_callback 参数,转发子代理 reasoning 事件
- SubAgentTool 新增 _subagent_output 回调,将子代理思考过程以 line 流式输出到前端
2026-08-05 00:16:34 +08:00
qing
09556c9ef4
feat(aibox): run_command 强制流式输出;子代理升级为完整工具代理;补充情绪应对策略
...
- run_command 移除 stream 参数,删除非流式 subprocess.run 执行路径,统一走流式输出
- 子代理 (create_subagent) 从轻量无工具升级为拥有全部工具的完整代理,支持多轮工具调用与 max_turns 限制,结束后自动总结
- 系统提示词补充子代理使用建议与情绪应对策略
2026-08-05 00:09:25 +08:00
qing
cc671a9fce
feat(dnfs): 含前端内容的节点渲染到当前页面时自动执行(隔离iframe沙箱启动特效)
2026-08-04 23:57:39 +08:00
qing
f7ed1f785b
fix(dnfs): 前端代码节点改为隔离iframe沙箱运行,特效不再污染父页面导致运行后无法进入节点
2026-08-04 23:51:21 +08:00
qing
2ff7908bc7
feat(db): _view_db -n 改为取最后 N 行
...
按 rowid 倒序取末尾 N 行,外层再正序展示,便于查看最新日志;
-w 条件放入内层子查询,语义为"最后 N 条匹配记录"。
2026-08-04 23:44:59 +08:00
qing
745ce06f85
fix(dnfs): 前端代码节点运行改为局部输出缓冲+捕获窗口自动恢复console,避免应用自身日志(pid)刷进输出框干扰导航
2026-08-04 22:47:48 +08:00
qing
f17a6a8233
fix(dnfs): 前端代码节点注入脚本包IIFE隔离作用域,避免覆盖页面全局导致运行后无法进入节点
2026-08-04 22:29:10 +08:00
qing
30360cb106
feat(dnfs): 前端代码节点支持完整HTML/CSS/JS并注入当前页面
...
将内联 JS 节点扩展为内联前端代码节点:内容存完整 HTML 文档,
运行后解析注入当前页面——style 注入 head、script 在全局作用域执行
可操作整页加特效、body 渲染到节点下方容器,console 输出捕获到下方。
2026-08-04 22:24:33 +08:00
qing
ec3df34b43
feat(db): 新增修复 Notes 表 pid 悬空节点的脚本
2026-08-04 22:19:05 +08:00
qing
c7441c1c6f
fix(dnfs): JS代码节点改用<script>注入执行以兼容CSP
...
new Function/eval 被 CSP(script-src self unsafe-inline) 拦截,改用注入内联
<script> 执行,避免引入 unsafe-eval。代码在全局作用域运行可操作页面加特效,
console 输出经 hook 捕获到输出区(保留原 console 行为)。
2026-08-04 22:11:19 +08:00
qing
fed2d42472
refactor(dnfs): JS代码节点改为在当前页面执行以支持页面特效
...
移除 iframe 沙箱方案,改为 new Function 在当前页面上下文执行,
代码可直接操作 document/window 对页面施加特效;console 输出捕获到下方区域。
2026-08-04 22:08:15 +08:00
qing
2918f2c83c
feat(dnfs): 特殊节点类型由网页代码(html)改为JS代码(js)
...
将 _sp 标识从 html 改为 js,运行方式由新窗口 document.write 改为
插入页面 iframe 沙箱执行,捕获 console 输出,postMessage 自适应高度。
后端 dnfs.py 白名单、校验、审核文本同步更新。
2026-08-04 22:05:01 +08:00
qing
87538e7729
fix(waf): 豁免扩展到所有笔记写接口 (add/update/edit/delete_note)
...
修正正则匹配 query 前缀问题,统一豁免笔记接口的 CRS 误报规则。
2026-08-04 21:52:15 +08:00
qing
fd088f5959
fix(waf): 对 /add_note 接口豁免 CRS 误报规则
...
嵌入式/技术笔记含 C 代码(if()/select/sbit)被 SQLi/命令注入规则误判拦截。
仅移除误报规则(942170/942230/932xxx/934xxx),其余 CRS 规则及接口仍生效。
2026-08-04 21:32:14 +08:00
qing
15f8c9552d
fix(core,mgmt): list 返回 running+command 字段,命令列不显示为空
...
原 list 把 check()(命令字符串)放进 status 字段,前端误当状态显示,
命令列取不存在的 command 字段导致显示为空。
修复:list 返回 running(bool) + command(string),前端对应显示状态与命令。
2026-08-04 21:31:21 +08:00
qing
43c5821d3d
fix(gateway): 修复代理 URL 双斜杠导致下游 404
...
handleProxy 拼接转发 URL 时,target_path 以 '/' 开头,
url = t_url + '/' + target_path 会产生双斜杠(如 //list)。
core 等使用精确路径匹配的下游服务返回 404。
修复:仅当 target_path 不以 '/' 开头时才补斜杠。
2026-08-04 21:20:24 +08:00
qing
1d7641cc89
fix(core): 纯 HTTP 启动 HTTP 服务(不需要 TLS,符合项目约束)
...
core 的 HTTP 服务仅供 gateway 内部代理,且 WAF 已在前端终止 TLS。
原代码强制加载 server.crt/server.key,但证书不存在,导致 core 无法启动,
所有请求被 gateway 返回 500 'Internal Server Error'。
修复:使用无 TLS 的 3 参数 HttpServer 构造函数,纯 HTTP 启动。
2026-08-04 21:11:35 +08:00
qing
6a68b3393d
docs(waf): _fetch_crs.sh 生成的 coraza.conf 模板指向 tuning.conf
...
避免重跑脚本覆盖调优配置,模板不再包含重复的阈值/偏执规则
2026-08-04 21:11:26 +08:00
qing
0700491300
取消注释
2026-08-04 21:02:08 +08:00
qing
d036af935f
feat(waf): 启用 OWASP CRS 异常评分制自动拦截
...
- SecRuleEngine On 自动拦截异常评分达阈值的请求(规则 949110)
- 新增 rules/local/tuning.conf 调优文件(偏执等级 1 + 阈值 5/4)
- tuning.conf 独立于自动生成的 crs/coraza.conf,重跑 fetch 不覆盖
2026-08-04 20:40:25 +08:00
qing
34cd295005
feat(core): mgmt 接入 core 进程管理 + 管理员认证
...
- gateway 新增 POST /admin/verify 验签接口,供内部服务校验管理员 Token
- core 的 /list /exec /kill 接入管理员认证(调用 gateway 验签,fail-closed)
- gateway 代理 opened 白名单加入 core:5200
- mgmt 管理页显示当前用户与角色,进程页接入 core 进程管理接口
2026-08-04 20:00:24 +08:00
qing
c8812dd27c
static: 迁移 mgmt 前端到 static/public 并移除静态列表
...
将 mgmt Jinja2 模板原封不动迁移为纯静态 HTML/CSS,
删除用户列表与模块列表,改为静态提示文字。
2026-08-04 19:23:57 +08:00
qing
3460a157d0
docs: 新增 libth 安全审计与 aibox 开放版开发计划
2026-08-04 19:02:22 +08:00
qing
fe618be1fa
fix(captcha): 验证码存储容量上限防 OOM (P1-1)
...
新增 MAX_STORE_SIZE(默认 10000,可配置 max_store/CAPTCHA_MAX_STORE),
_handle_image 在清理过期项后检查容量,超限拒绝生成并返回错误,
防止攻击者高频生成验证码填满内存。
2026-08-04 18:40:36 +08:00
qing
4d9bb5d940
fix(libhttp): WebSocket 发送/代理队列上限防 OOM (P1-6)
...
- 新增 setMaxWsQueueSize()(default 1000),每个入队点检查
- wsSend / onProxyReadClient / onProxyReadBackend 超限关闭连接
- 更新审计文档 P1-6 状态、README v3.4.3
2026-08-04 18:27:50 +08:00
qing
37c6d401d6
fix(libhttp): 服务器读超时防 Slowloris (P1-4)
...
- 新增 setHeaderTimeout()(default 10s) / setReadTimeout()(default 30s),对齐 WAF
- doSSLHandshake 设置头超时覆盖握手,doRead 拆分为 async_read_header (头超时) + async_read (体超时)
- doWsRead 每次读取设置空闲超时,自动清理长期空闲连接
- 更新审计文档 P1-4 状态、README v3.4.2
2026-08-04 17:39:27 +08:00
qing
507054c4b2
fix(libhttp): WebSocket 单条消息大小限制防 OOM (P1-3)
...
- 新增 setMaxWsMessageSize/getMaxWsMessageSize(默认 16MB,与 Beast 默认一致)
- 服务端 doWsUpgrade/doWssUpgrade 与代理流 onProxyConnect/onProxySslHandshake 创建后调用 read_message_max
- 超限消息由 Beast 在分配内存前拒绝并关闭连接
- 更新审计文档 P1-3 状态、README v3.4.1
2026-08-04 16:03:06 +08:00
qing
85e0d0740b
fix(libhttp): HttpClient 响应大小限制防 OOM
...
- request_stream_sync 改为真流式,按块回调不二次缓冲
- 新增 set_max_response_size/get_max_response_size(默认 10MB,对齐 WAF)
- write_callback 超限返回 0 中止传输并抛异常
- 更新审计文档 P1-2 状态、README v3.4.0、INDEX 移除不存在的文档
2026-08-04 15:12:06 +08:00