ccs-balance
github.com/kikomaotu/ccs-balance
v1.0.3
模型与账号
可执行外部程序发起网络请求写入文件
DSH 插件:同步 cc-switch 各 provider 的余额,并统计 DSH 会话的 token 用量与花费。
作者原文(英文)
DSH plugin: sync cc-switch provider balances and track token usage & cost by day/month/total with relay-aware currency settings.
中文简介由 DeepSeek 模型翻译,仅供参考。
dshds-harnesscc-switchbalanceusagetokencost
检测报告
关注度高。命中了不少能力模式,其中可能有需要留意的。逐条看下面的清单。
1高关注3需留意2一般18未命中
高关注需留意一般
能力清单
- 可执行外部程序
spawns-processes高关注1 处命中lib/index.js:2import { spawn } from "node:child_process";- 看它调用哪些程序。调用本机已有的工具是常见做法。
- 发起网络请求
network需留意4 处命中lib/client.js:37fetch("/ccs-balance/api/settings", {lib/client.js:144return fetch("/ccs-balance/api/" + method + qs, { headers: { "x-ccs-balance": "1" } }).then((r) => r.json());lib/client.js:217fetch("/ccs-balance/api/settings", { headers: { "x-ccs-balance": "1" } }).then((r) => r.json()).then((d) => {lib/ccs_host_helper.py:2r"""ccs host helper: read-only cc-switch.db queries + balance fetch.- 看请求发往哪些域名。发往作者自己的后端是常见做法。
- 写入文件
writes-files需留意2 处命中lib/index.js:16try { writeFileSync(SETTINGS_FILE, JSON.stringify(settings), "utf8"); }lib/index.js:17catch { try { writeFileSync(SETTINGS_FILE_FALLBACK, JSON.stringify(settings), "utf8"); } catch { /* ignore */ } }- 看写入位置。写自己的配置目录是正常的,写系统目录不是。
- 含混淆或编码代码
obfuscated-code需留意1 处命中lib/client.js:293showSettings ? React.createElement("span", { style: { fontSize: "11px", color: "var(--color-text-secondary,#888)" }, tit…- 混淆本身不是恶意,但公开源码里出现大段混淆值得问一句为什么。
- 接触凭据或密钥
credentials一般22 处命中lib/index.js:384.replace(/([?&](?:key|token|api_key|apikey|access_token|authorization)=)[^&\s"']+/gi, "$1<redacted>")lib/ccs_host_helper.py:6Security: apiKey/accessToken are NEVER printed; redacted (first 6 + len) in provider listings.lib/ccs_host_helper.py:14SENSITIVE = ("key", "token", "secret", "password")lib/ccs_host_helper.py:31(re.compile(r"([?&](?:key|token|api_key|apikey|access_token|authorization)=)[^&\s\"']+", re.I), lambda m: m.group(1) + "…- 看它读取哪些凭据、发往哪里。用于登录自己的服务是正常的。
- 读取文件
reads-files一般3 处命中lib/index.js:9const HELPER = readFileSync(join(__dirname, "ccs_host_helper.py"), "utf8");lib/index.js:13try { settings = JSON.parse(readFileSync(SETTINGS_FILE, "utf8")); }lib/index.js:14catch { try { settings = JSON.parse(readFileSync(SETTINGS_FILE_FALLBACK, "utf8")); } catch { settings = {}; } }- 读文件是绝大多数插件的正常工作方式,本身不构成顾虑。
逐条扫描明细
| 能力 | 标识 | 关注度 | 命中次数 |
|---|---|---|---|
| 可执行外部程序 | spawns-processes | 高关注 | 1 |
| 发起网络请求 | network | 需留意 | 4 |
| 写入文件 | writes-files | 需留意 | 2 |
| 含混淆或编码代码 | obfuscated-code | 需留意 | 1 |
| 接触凭据或密钥 | credentials | 一般 | 22 |
| 读取文件 | reads-files | 一般 | 3 |
这份报告的口径
扫描读的是包里的源码,全程不执行第三方代码。 本次读了 6 个文件,扫描于 2026-10-14。 命中次数只说明源码里出现过这类调用,不说明行为好坏——一个插件读写文件 500 次和 1 次 都会被记为「读取文件」。这是能力清单,不是信任评分,也不是安全结论: 没扫出来的能力可能只是写法没被规则覆盖。
依赖安全公告
已查询这个插件声明的全部依赖,没有匹配到已公开的安全公告。(含 DSH 框架包在内的 @deepseek-ai/* 不作查询——那是运行时自己的问题,不是插件的。)