| 项目 | 支持版本 | 说明 |
|---|---|---|
| xmtool(小马远程桌面) | v1.0.x | WPF / .NET 8,Windows 10+ |
| pmvault(密码管理器) | 当前 main | Go 1.23+,Windows / Linux / macOS(构建层面) |
| work-reminder(工作提醒助手) | v2.0.x | Rust + Tauri 2,Windows 10+ |
| team-planner(团队协作台) | 当前 main | 纯前端,任意现代浏览器 |
历史版本不主动打补丁。发现旧版本有严重漏洞时,请直接报告,我们会评估是否需要 提供修复版本。
请不要用公开 Issue 报告安全问题,包括 GitHub Issue、Discussions 和 PR 描述。
请通过 GitHub 的 Security Advisory 私下报告(仓库页面的 Security 标签 →
Report a vulnerability)。这样报告内容只有你和维护者可见。
报告中请包含:
| 项 | 说明 |
|---|---|
| 受影响项目与版本 | 如 pmvault v1.2.0 |
| 漏洞类型 | 如「解密失败后错误信息泄露本地路径」 |
| 复现步骤 | 尽量给出最小复现路径 |
| 影响面 | 攻击者能拿到什么、能做什么 |
| 你的联系方式 | 便于确认修复后回访 |
我们的响应承诺:
| 阶段 | 时限 |
|---|---|
| 确认收到 | 3 个工作日内 |
| 初步评估(是否有效、影响多大) | 7 个工作日内 |
| 修复发布 | 视严重程度,严重漏洞优先 |
若你希望漏洞公开,我们会在修复发布的同日通知你,并在 CHANGELOG.md
中记录该问题。除非你明确要求延迟,我们不会主动披露细节。
本项目遵守以下安全要求。违反其中一条都视为缺陷:
- 密码、连接凭据、令牌一律加密后入库,不得明文落盘
- 加密必须使用认证加密(AES-256-GCM 等),不允许仅加密不校验
- 密钥派生使用内存硬算法(Argon2id / PBKDF2),参数不低于安全基线
- 主密钥不落盘,或落盘时使用平台凭据保护(DPAPI / Keychain / Secret Service)
- 口令与主密钥分离存储,校验口令不得直接等于主密钥
- 默认不发起任何外部网络请求
- 确需联网的功能(如远程主机在线状态探测)必须:
- 由用户显式开启或逐次触发
- 目标地址不携带任何本地数据
- 有超时与失败降级,不阻塞主流程
- 零遥测:不采集使用统计、不上报崩溃、不含任何第三方统计 SDK
- 所有外部输入(文件、数据库、网络响应、命令行参数)均需校验
- 拼接到 shell 命令或 SQL 的内容必须参数化,禁止字符串拼接
- 导出 / 导入功能需防止路径穿越
- 文件写入采用原子替换(临时文件 + rename),避免中断产生半截文件
- 内部错误细节不得进入用户可见响应体。路径、数据库表名、系统错误码 只写日志,不回显给用户
- 错误信息面向用户时使用稳定错误码 + 可读文案,便于检索与国际化
- 数据存放在应用目录或用户目录,卸载即删
- 不写入注册表等隐蔽位置(Windows 下如需注册表项,须在文档中明示)
- 提供数据导出 / 备份能力,并在文档中说明确切路径
以下是有意为之的设计取舍,不是待修缺陷,但了解它们有助于判断是否适合你的场景:
| 项目 | 限制 | 影响 |
|---|---|---|
| team-planner | 数据存于浏览器本地存储,无服务端 | 多设备不同步;清浏览器数据即丢失,请用内置导出备份 |
| pmvault | 主密钥在内存中,进程结束即失效 | 每次重启需重新解锁;这是「主密钥不落盘」的代价 |
| work-reminder | 数据文件为 JSON,非数据库 | 任务量级到数千条后读写性能会下降 |
| xmtool | 密码用 Windows DPAPI 保护 | 换机器 / 换用户后无法解密,属预期行为 |
- 依赖一律走语言原生的包管理(
PackageReference/go.mod/Cargo.toml), 仓库内不放第三方二进制 - 新增依赖必须在 PR 中说明用途、许可证与维护状态,并登记到
THIRD-PARTY-NOTICES.md - 自动化依赖更新(Dependabot)配置的更新在 PR 中逐条评估后合并