* LICENSE —— MIT
* THIRD-PARTY-NOTICES —— 依赖清单、再分发合规说明(含随仓库分发的
Apache ECharts 5.6.0 / Apache-2.0)与自查清单
* CONTRIBUTING.md —— 开发环境、五层验证、必须遵守的不变量、提交规范
* SECURITY.md —— 漏洞私有报告渠道、已有措施、已知非目标
* CODE_OF_CONDUCT.md —— 改编自 Contributor Covenant 2.1
* .github/ —— Bug 报告 / 功能建议表单 + PR 模板
* .editorconfig —— 与 .gitattributes 保持一致
* 全部 Python / Shell 源文件加 SPDX-License-Identifier: MIT 头
* README 增加「开源与许可」章节与许可标识
3.5 KiB
3.5 KiB
安全策略(Security Policy)
支持范围
本项目按「自托管、局域网内使用」的定位开发。安全修复只针对当前主分支与最新发布版本。
| 版本 | 是否接受安全修复 |
|---|---|
1.1.x(当前) |
✅ |
< 1.1 |
❌ 请先升级 |
如何报告漏洞
请不要在公开 Issue 里贴出可直接利用的细节(含真实 Cookie、secret_key、可复现的绕过步骤)。
请通过以下任一私有渠道联系维护者:
- 邮件:
<安全联系邮箱>(占位,待维护者补全) - 或通过代码托管平台(Gitea)的站内私信联系仓库管理员
请在报告里尽量包含:
- 受影响的版本 / 提交号
- 复现步骤与最小复现(可脱敏)
- 影响范围(能读到什么、能改到什么)
- 如果有,你建议的修复方向
我们会在 7 天内确认收到,并在修复发布后于 CHANGELOG 里致谢(除非你希望匿名)。
设计上已有的安全措施
理解这些边界,有助于你判断某个现象是「设计如此」还是「真的漏洞」:
| 项 | 做法 | 位置 |
|---|---|---|
| 全站鉴权 | 每个页面都有 @login_required,每个 /api/* 未登录返回 401 JSON |
workbuddy_portal/security.py、web/views.py |
| CSRF | 所有写请求必须带 X-CSRF-Token,页面注入 window.WB_CSRF,服务端统一拦截 |
security.check_csrf |
| 会话签名 | Flask secret_key 由 data/instance.json 持有,首次启动随机生成 |
workbuddy_portal/config.py |
| 口令存储 | 加盐哈希,不存明文 | security.hash_password |
| 凭据脱敏 | 云端 Cookie 是账号凭证:入库后页面与接口都不回传全文,只给「N 字符,结尾 …xxxx」 | config.SECRET_KEYS、web/views.py |
| 开放重定向 | 登录后的 next 只允许站内相对路径 |
web/views.py |
| TLS 校验 | 默认开启,不提供「关掉校验」的快捷开关(Cookie 不该裸奔) | settings.ssl_verify |
| 容器权限 | 运行层非 root(uid/gid 1000 app) |
Dockerfile |
绝不入库:data/instance.json(含 secret_key)、data/usage.sqlite、logs/*、.env。
.gitignore 已覆盖;改动忽略规则后请用 git check-ignore -v <file> 逐条复核。
已知的非目标(部署方需自行处理)
本项目刻意不做下面这些,请按你的环境补齐:
- 没有多租户与细粒度权限:登录用户即为管理员,能改配置、能看全部数据。
- 没有限流与账号锁定:公网暴露前请置于反向代理的 rate limit 之后。
- 没有强制 HTTPS:请由反向代理(nginx/Caddy)终止 TLS。
- 没有备份机制:备份策略需要你自己定(见
docs/DEPLOYMENT.md)。 - 不建议直接暴露到公网:设计前提是局域网或 VPN 内使用。
- Cookie 的获取方式由使用者负责:手动从浏览器复制。请勿把该 Cookie 分享给他人, 它的权限等同于你的账号;轮换后记得在「配置管理」页更新。
部署前的最小检查清单
- 已修改默认管理员口令(
WB_ADMIN_PASSWORD),不再是admin123 data/与logs/目录的权限只对服务账号可读写- 前面有反向代理并启用了 HTTPS
- 确认
data/instance.json没有被提交到任何仓库 - 已规划备份(SQLite 库是唯一正本)