🔒 安全
sip 天生保守,因为它觉得信息首先是你的。
一句话:它不收集、不追踪、不偷偷上传你的东西。
sip 的安全体系分三层:数据归属(全本地、不注册、不云端)、默认保守(遥测默认关、API Key 不进脚本)、以及核心的 孟思琳(simon) 安全守护(默认开启、无法关闭,只能调节挡位)。角色档案见 梗百科 · 孟思琳。
孟思琳(simon)——安全守护(默认开启,无法关闭)
孟思琳是 sip 的安全子系统拟人(源码 simon.cs),负责:
- 数据库损坏自动修复(完整性检查 + WAL 自愈)
- SSRF 防护(全文抓取地址校验)
- 终端注入拦截(ANSI 转义序列剥离)
- 非交互调用管控(脚本 / AI 调用按挡位拦截)
- 数据加密(挡位 3:SQLCipher + AES-GCM)
挡位
挡位只有 1 / 2 / 3,没有 0 = 不可关闭:
| 挡位 | 名称 | 行为 |
|---|---|---|
| 1 | 基础(默认) | 完整性自愈 + 基础防护,现状能力 |
| 2 | 严格 | CLI 写操作一律拒绝,只读命令可用,或到 TUI 操作 |
| 3 | 极致 | CLI 调用全部拒绝(唯一例外 simon status),只允许通过 TUI 使用;开启数据加密 |
- 挡位只能升不能由脚本降:降挡只能在 TUI 命令栏当面操作,CLI 一律拒绝(
SIMON_LOCKED)——"孟思琳不允许被脚本或 CLI 调弱" - 挡位权威值存在系统凭据库(改
sip_settings.json无法降挡),按数据目录哈希隔离——同一机器的多个 sip 副本互不影响 - 拦截原则:CLI(含交互终端)是不可信通道;TUI 命令栏不经拦截检查,永远是真人通道
- 所有动作留痕在
readwithhotsoup/simon_events.json(最近 200 条:repair_db/blocked_cmd/level_change/key_import) - 人格话术:修复数据库时「哎呀,麻烦我修复下数据库——检测到损坏,已保留现场并重建」;About 界面「🔒 孟思琳正保护着你的软件哦」
CLI 命令
sip simon status [--json] # 挡位 / 加密状态 / 修复与拦截次数 / 最近事件
sip simon level <1|2|3> # 调挡位(降挡只能在 TUI 命令栏)
sip simon export-key <file> # 导出数据库加密密钥备份(换机迁移用,需真实终端)
sip simon import-key <file> # 导入密钥备份(需真实终端)simon status 输出示例(节选):
孟思琳(simon) 安全守护 挡位: 2(严格)——默认开启,无法关闭,只能调节 数据加密: 已开启(密钥在系统凭据库,自动生成;开启后不可逆) 永远作为此软件的最后一道安全防线。 数据库修复: 1 次 已拦截非交互调用: 3 次
数据加密(挡位 3)
升到挡位 3 时自动执行全数据加密,原明文库备份为 rss.db.plaintext.bak:
| 数据 | 加密方式 |
|---|---|
rss.db | SQLCipher(PRAGMA key;FTS 索引表启动时重建,首次 --grep 懒回填) |
fulltext/*.md 全文缓存、dedup.json | AES-GCM(SIPC1 格式,密钥复用) |
- 密钥自动生成(32 字节随机),只存系统凭据库(Windows 凭据管理器 / macOS 钥匙串 / Linux Secret Service),你不需要记任何密钥
- 加密幂等、崩溃安全(两步原子替换,任一时刻崩溃数据可恢复);降挡后加密库仍可读——挡位 3 只决定"是否迁移为加密"
- 开启后不可逆(
status提示 "开启后不可逆"),换机迁移用sip simon export-key导出密钥备份,妥善保管(该文件可解密你的全部数据) export-key/import-key都需要真实交互终端——防止脚本把密钥偷走
网络与终端防护
- SSRF 防护(全文抓取):只抓
http/https;回环(localhost)与链路本地地址硬拦截;私网段默认拦截(内网源可在 AI 配置里设"allowPrivateNet": true放行);云元数据地址(如 169.254.169.254)不可达 - 终端注入拦截:RSS 源标题/正文里的 ANSI 转义序列与控制字符在 CLI 导出与 TUI 渲染前统一剥离(保留
\n \t \r正常空白,不影响 Markdown 语法),防恶意源在终端里注入转义码
数据库可靠性
- SQLite WAL 模式 + 完整性检查:上次未正常退出时启动自检并自动修复(大库约需 30 秒,仅此一次),修复事件记入
simon_events.json - 遥测库(
telemetry.db)独立于rss.db,损坏绝不影响阅读数据(见遥测与隐私)
凭据与隐私
- API Key:只存系统凭据库,
--init必须在真实终端手动运行——API Key 不进脚本、不进日志 - 搜索词等敏感记录只在本机,可随时
telemetry export/telemetry clear - 遥测(苏暖泉)默认关闭,开启后也仅本地记录、绝不自动上传
质量保障
仓库内置 37 个进程级黑盒测试用例(CLI 契约 / SSRF 矩阵 / 去重不变量 / 终端注入 / simon 守护与加密往返)+ GitHub Actions CI,每次改动自动回归;其中 SimonTests.cs 专门断言:「不存在 off = 无法关闭」。