当前仓库维护的是桌面端主干版本。安全修复会优先覆盖当前默认分支。
- 不要在公开 Issue 中粘贴 API Key、请求头、截图原图或包含隐私内容的日志。
- 如果问题涉及凭据泄漏、截图隐私或可远程利用的漏洞,请私下联系维护者处理。
- API Key 默认保存在
%APPDATA%/DanmuAI/config.db,优先使用 Fernet 加密(全局api_key)。 - 自定义模型的
apiKey以 Fernet 密文写入custom_modelsJSON(与全局api_key_encrypted共用.key);读取时解密,legacy 明文会在读路径自动升级;GET /api/config与GET /api/custom-models返回掩码值********。 - 日志会脱敏 API Key、
Authorization头、长 base64 图片/音频数据和加密串;配置写入失败日志不会输出完整密钥字段。 - 默认不保存截图,不会把截图原文写入日志。
- 过期请求和旧场景回复会被丢弃,避免旧内容覆盖当前画面。
掩码值 ******** 在探测请求里含义是"沿用已保存的档案 key",因此恢复它有严格前提:
- 通用
POST /api/probe没有不可变档案身份(只能回落到"首个档案")。当调用方 未显式提供新 key(空值或掩码值)时,禁止与调用方显式提供的api_endpoint/model/api_mode组合;要测试新配置必须随请求显式提供新的 key。越界请求在 发出任何 HTTP 请求之前返回 400(error = probe_scope_violation)。 POST /api/custom-models/probe仅在同时满足下列条件时才恢复掩码 key:命中 同一档案记录,且归一化后的 endpoint、provider/transport、mode 与档案已存作用域 一致,且探测的model_id在该档案model_idsallowlist 内。替换 endpoint / provider / mode 或选用档案外 model 同样返回 400,要求重新输入 key。- 前端模型弹窗在 endpoint / provider / model / mode 变化后会清除"沿用旧 key"状态 并提示重新输入;后端始终是最终校验者。
- 出站目标策略:只允许
http/https;loopback(用户明确保存或输入的本地兼容 服务)与公网目标允许;私网(RFC1918 等)、link-local(含169.254.0.0/16)、 云元数据(如169.254.169.254、100.100.100.200、fd00:ec2::254)、多播 / 未指定 / 保留地址一律拒绝(error_category = outbound_target_blocked)。主机名 会解析全部 A/AAAA 记录后按同一规则判定。 - 探测默认 不跟随 HTTP 重定向(显式
follow_redirects=False);3xx 响应按outbound_redirect_blocked拒绝,原Authorization不会跨 origin 转发。 - 上述策略只在发出真实出站请求的阶段生效;
local阶段不发起网络请求。探测错误 只返回稳定分类与安全摘要,不回传目标响应体、凭据或敏感 header。
Web 控制台仅监听 127.0.0.1,面向单用户本机场景,不是多用户网络服务。
loopback 绑定限制网络暴露面,但不提供进程级身份隔离;本机其他进程仍可
访问端口,因此 Host、Origin、Referer 不作为 session 身份凭据。
桌面启动器把短时、一次性的 bootstrap secret 放入 URL fragment(不会随 HTTP
请求发送),页面立即用 X-DanmuAI-Bootstrap 换取本次进程的 Bearer token,随后
移除 fragment 并仅在当前 tab 的内存/sessionStorage 中复用 token。bootstrap secret、
Bearer token 都不得写入日志或 URL query。
| 能力 | 鉴权 | 说明 |
|---|---|---|
GET /api/health |
无 | 最小健康检查,仅返回 ok/service |
GET /api/session |
一次性 bootstrap 或 Bearer | 返回当次启动的 Bearer token;不接受伪造的 Host/Origin/Referer |
/api/* 其余 HTTP API |
Bearer | 状态、日志、配置、人格、知识包/任务/条目及其他控制台 API 默认私有 |
GET /api/live-overlay/status、/api/live-overlay/events |
无 | 明确允许的直播 overlay 连接状态/SSE;不返回配置或凭据 |
GET /api/live-overlay/config |
无 | 仅返回 Overlay 字号 font_size;不返回其他配置或凭据 |
GET /api/update/status |
Bearer | Velopack 应用内更新状态 |
POST /api/update/check、/download、/restart |
Bearer | 应用内检查、下载、重启更新 |
PUT/POST /api/config、POST /api/start、/api/stop、/api/toggle |
Bearer | 全局配置保存与启停控制 |
人格写操作(PUT/POST/DELETE /api/personae/*、active、model、label、rollback、restore) |
Bearer | 人格模板、活跃列表、模型绑定与回滚 |
自定义模型写操作(POST/PUT/DELETE /api/custom-models/*、default、probe) |
Bearer | 模型档案增删改与连接探测 |
GET /api/diagnostics |
Bearer | 诊断快照(含调度、计时、invoke 超时计数) |
弹幕池写操作(PUT /api/danmu-pool/settings、POST/DELETE /api/danmu-pool/custom、POST /api/test/danmu) |
Bearer | 公式化弹幕池配置、自定义句库与测试注入 |
烂梗弹幕写操作(PUT /api/meme-barrage/settings、POST /api/meme-barrage/clear) |
Bearer | 烂梗配置与库清理 |
朗读写操作(PUT /api/danmu-read/config、POST /api/danmu-read/probe) |
Bearer | TTS 配置与探测 |
麦克风写操作(POST /api/mic/test、/api/mic/test-send) |
Bearer | 麦克风测试 |
截图区域写操作(POST /api/capture-region/select、/reset) |
Bearer | 触发可视化选区与重置 |
知识库写操作(POST/PATCH/DELETE /api/knowledge/*、POST /api/knowledge/retrieval/preview) |
Bearer | 知识包、条目、导入任务管理与检索预览 |
字体写操作(POST /api/fonts/import、GET /api/fonts、DELETE /api/fonts/{sha256}) |
Bearer | 字体导入、列表、删除(读操作同样需 Bearer) |
直播 overlay 写操作(POST /api/live-overlay/test) |
Bearer | 测试弹幕推送 |
WS /ws/logs、/ws/status、/ws/panel |
首次消息认证或 Query ws_token |
需与 session token 一致(向后兼容) |
假设:信任本机用户;本机其他进程或恶意软件若可访问 127.0.0.1:18765,仍可能尝试请求 API,但没有启动器 bootstrap 或当前 Bearer 不能通过私有 API 鉴权。请勿将控制台端口暴露到局域网或公网,勿在不可信的多用户环境中运行。
DanmuAI 社区站(注册守卫 CORS、Supabase 社区 Schema 等)已抽离为本地子项目 community/(不进本仓库 Git);安全说明见该目录内 README.md。
- 当前版本会按
screen_index截取所选显示器全屏,请确保该屏幕上没有密码框、聊天窗口、支付页面、企业内网内容等敏感信息。 - 需要局部截图时,请关注路线图中的可视化选区功能;在实现前请自行隔离敏感窗口。
- 发布构建或共享代码前,确认仓库不包含
log/、ph/、本地数据库、.key、缓存目录。