07 · 安全与边界

这份文档假设读者会把它部署到有真实客户数据的环境。先读第 1 节,那是设计上的既有缺陷,不是配置问题。

1. 三条必须知道的事实

  1. 管理后台没有登录。/admin/* 是内网管理面板,靠"不放公网"保护,不是靠认证。任何能访问 8765 端口的人都能改智能体、看客户聊天记录、下发设备指令。→ 只绑内网 / 尾巴上必须加反代 basic auth 或 VPN(见 06 第 4 节)。
  2. WebSocket 没有鉴权。client_id(设备号)就是身份。猜到设备号就能冒充设备上线、接收服务端下发的指令(其中包含客户消息内容)。→ 服务端只监听内网;设备号不要用可枚举的短串。
  3. /ext 默认关闭。未配 EXT_TUNNEL_SECRET 时所有 /ext/* 返回 403。这是唯一默认安全的部分。

2. 威胁模型

威胁现实性缓解
服务端端口被公网扫到,后台裸奔高(默认配置就会这样)只绑内网 / 反代加认证 / 防火墙白名单
冒充设备接入,窃取消息中内网隔离;轮换设备号;不要把 8765 暴露
客户账号(/ext)越权看别人的数据中三道门 + 两级可见范围(组织 ∩ 账号),未授权一律 403 不暴露 id
聊天内容流出到第三方 LLM高(用了云端模型就是事实)用本地 ollama;或明确告知客户;记忆/知识库尽量减少明文敏感信息
客户在消息里注入指令(prompt injection)高记忆清理与人工导入分离、工具逐项授权、敏感工作流额外授权
模型被诱导执行危险指令(删好友/解散群)中这些指令默认不给智能体授权;要用就逐台开
执行端丢失(平板 / 手机)中服务端解绑设备 → 记忆绑定失效;改管理后台口令

3. 默认安全设计(已实现)

  • 工具逐项授权:联网、建表、建任务、读写某张表、跑某个工作流、下发某个指令号,全部是独立开关,默认全关。设备端 error() 一律上报 302 进审计。
  • 没有删表能力:工具集里永远没有 table_delete,工作流 delete 节点一律拒绝。
  • /ext 只读为主:设备/智能体/知识库/表格只可查看;可写的只有"开关 LLM 推送""改模型参数""长期记忆条目"。越权字段在处理函数里被忽略,不是界面上藏起来。
  • 可见范围两级:组织级配置 ∩ 账号级配置,取交集。不配 = 跟随组织。
  • 记忆可回看:唯一会删数据的功能(记忆清理)留 before/after 清单,且只删 source='agent'。
  • 会话安全:/ext cookie 带指纹,改密后旧会话自动失效。
  • 没有硬编码密钥:所有密钥走 .env 或数据库;开源仓里应有 .env.example 而无 .env。

4. 上线前必做(按优先级)

  1. 监听只绑内网/本机:HOST=127.0.0.1(venv 方式)或 compose 的 ports: ["127.0.0.1:8765:8765"],外网通过反代进;8765 别直接暴露。
  2. 反代对 /admin 加 basic auth / 仅内网可达;/ext 用 X-Tunnel-Secret。
  3. MYSQL_PASSWORD、EXT_TUNNEL_SECRET 用长随机串,别用默认值;每季度轮换。
  4. DEBUG=false、RELOAD=false、EXT_COOKIE_SECURE=true(HTTPS)。
  5. LLM key 只存在数据库的智能体行里,别写进 .env 或代码;离职/换人时在后台改掉。
  6. 执行端:单独一台平板(推荐)或手机 + 单独的企业微信账号;关闭无关通知;别在设备上留客户资料截图。
  7. 备份(见 06)并真的演练一次恢复。
  8. 给客户的数据留存说明要写清楚:消息会进 messages 表、会被送去哪个模型。

5. 合规与免责

  • 本项目通过安卓无障碍服务模拟人工操作企业微信。这属于本机自动化,不是协议破解;但它可能违反企业微信的服务条款,账号存在被限制的风险。风险由部署者承担。
  • 不要用它做群发广告、批量加人、爬取通讯录——这些是平台明确限制的行为,也是本项目不为其做任何优化的方向。
  • 客户聊天内容属于个人信息/商业信息。接入云端 LLM 等于把这些内容交给第三方。请自行完成必要的告知与授权(尤其涉及欧盟/国内个保法场景)。
  • 商标 "SevFish / SevFishComVBot" 不随代码授权(Apache-2.0 §6)。二次分发请改名。

6. 报告安全问题

发现漏洞请不要开公开 issue。用仓库的 Security 页面私密报告(或 issue 里先说明"想私下沟通"),通常 7 天内回复。

需要有人帮忙落地?可以联系定制开发、私有化部署、联合交付或技术咨询。