Sitelet https://github.com/DNTOF/SLDataAPI/wiki/Security-Model
Skip to content

Security Model

DNT_OF edited this page Oct 4, 2026 · 10 revisions

安全模型

对齐 2.6.1 RIDGE(预发布,main)与稳定版 2.6.0 PEAK(tag v2.6.0_PEAK)。两者的差异只有本页「文件端点」中的链接防护和 Beta-Features 的内测端点(默认关闭)。责任边界见仓库 SECURITY.md。

传输

插件自身全部 明文:HTTP、ws:// 控制与语音。对外暴露须自行加 HTTPS/WSS 与网络隔离。不要对公网裸奔明文端口。


凭据

凭据 用途
verify_token 数据口:/get_sl_data、/plugins/adapted 等
API Key 控制 HTTP/WS、语音、事件订阅

verify_token fail-closed

  • 出厂默认 your_secret_token、空、或未通过强度校验(长度 ≥8 且同时含大写/小写/数字/特殊符号)时:Enable 打 Error 并关闭数据口;若控制面也未启用则不绑定 HTTP。
  • 数据口优先:Authorization: Bearer / X-SLDataAPI-Token / X-SLDataAPI-Verify-Token。
  • ?token= 仍兼容但已弃用。

API Key

  • 磁盘仅存指纹;明文只在 apikey create 时写入一次性文件(命令 response 不含明文)。
  • control_token 已废弃:若仍配置,启动警告后忽略,不作为鉴权。
  • 锁定表与只读数据分表。
  • 401 = 未认证 / Key 错;403 = Key 对但被拒绝。

远程硬拒绝

  • sldataapi / slda 全子命令不能经 /control/console/command 或控制 WS 执行。
  • Key CLI(create / revoke / list)在远程执行上下文一律拒绝;仅本地控制台。

审计 ACL(duty)

  • duty 模板默认不授予 /control/audit/list。
  • 即便 override 打开,非 admin 也只能看到自己这条的请求体;其他 Key 的写操作 payload 显示 [redacted]。
  • 落盘会打码常见密钥字段 / Bearer 前缀。

自动更新

  • 当前程序集未强签名时:拒绝自动安装(即使 auto_update_install: true),只打日志。
  • 已签名构建要求下载文件公钥令牌与当前一致。
  • 启动 + 默认 72h 静默复查;跳过 GitHub 上标记为 prerelease/draft,以及 tag 名含 beta / alpha / rc / preview / dev 等标识的版本(避免装到非正式包)。
  • 检查走 GitHub releases/latest(本身就不返回 prerelease/draft)。v2.6.1_RIDGE 的 tag 名不含预发布标识,靠的是 Release 上的 Pre-release 标记,所以 2.6.0 不会被自动推到 2.6.1。

WebDAV

  • 可选;默认关。启用后定稿 zip 以 HTTPS PUT + Basic Auth 上传。
  • 只接受 https://;http:// 校验失败并跳过。
  • 密码与 Authorization 头不写日志。

详见 HTTP-API、Configuration。


与 2.5 的差异(摘要)

2.5 2.6.x
control_token 控服 API Key + ACL
扁平控制路径 RA 对齐路径(无别名)
无远程硬拒绝 Key CLI 远程一律拒绝 sldataapi / Key CRUD

完整旧接口见 Old-HTTP-API。


DoS 与资源上限

层 措施
HTTP Slowloris 总时限 15s;并发 64;头 16KB;体 64KB
控制 WS 分片组装 30s;空闲 90s;单消息 256KB;连接 8;单连接并发 call 4
语音 WS 连接 8;握手 10s;发送 Poll + 超时,避免主线程卡死

文件端点(若启用 file_root)

  1. 路径限定在 file_root 内(防 ..);拒绝含 : 的路径(NTFS 备用数据流)
  2. 拒绝经过符号链接 / 目录联接(junction)的路径(2.6.1 起,不受任何开关影响):从 file_root 下一级起逐级检查已存在的路径分量,任何一级是重解析点(reparse point,含悬空链接)即拒绝,错误信息 路径经过符号链接或目录联接(junction),已拒绝(防止越出 FileRoot)。防止在 file_root 里放一个指向外部的链接来绕过第 1 条。对全部文件端点生效:files/list|read|write 以及 2.6.1 内测的 files/stat|read_chunk|write_chunk。file_root 本身是链接不受影响(只检查其下的分量)
  3. Windows 系统目录禁读写
  4. 扩展名白名单(yml/yaml/txt/json/cfg/ini/conf/config/xml/properties)
  5. 禁止游戏数据目录与插件自身配置目录
  6. ACL:/control/files/ 默认拒绝,admin / all_control_true 也不自动授予

升级注意:如果你有意在 file_root 里放了链接 / junction,升级到 2.6.1 后经过它的路径会被拒绝;请把 file_root 直接指向真实目录。

适配插件动作(2.6.1 内测)

  • beta_adapted_plugin_actions 默认关;打开后 /control/adapted/ 仍默认拒绝(含 admin / all_control_true),须按 Key 显式授权。
  • 每次调用都按写操作写入审计;插件拿到调用方 Key 的 id(Actor)与传输方式,可做二次授权。
  • 插件处理器运行在主线程、超时 3s;请求 / 返回体各 ≤64KB。插件代码与 SLDataAPI 同进程同权限——只装可信插件。

详见 Beta-Features。


使用建议

  • control_enabled 默认 关;非必要不启。
  • 必须设置强随机 verify_token(勿用出厂默认)。
  • 按需要分多把 API Key;控制面凭据泄露即等同本机控制台权限。
  • /control/console/command 等同本机控制台——凭据泄露即沦陷。
  • 对外请反代 HTTPS + 限制来源。

Clone this wiki locally