本文档说明 TaskBridge 当前版本的安全边界、默认防护和部署注意事项。这里不讨论明文传输问题;是否使用 HTTPS / WSS 取决于你的部署环境和反向代理配置。
-
除注册、登录、刷新 Token 和健康检查外,业务接口默认需要 Bearer Token。
-
服务端以
user_id作为数据隔离边界。任务查询、任务修改、父任务引用、同步日志和设备操作都必须校验归属。 -
Access Token 携带签发时的设备和 Refresh Token 会话声明;会话治理接口会校验当前会话仍然活跃,避免已撤销会话继续管理其他设备。
-
Refresh Token 保存在服务端,并绑定
device_id。 -
删除设备会撤销该设备关联的 Refresh Token。
-
用户可以列出活跃 Refresh Token 会话,撤销单个会话,或按当前设备撤销其他设备会话。
-
WebSocket 推荐使用短期 Ticket 建连,Ticket 有效期由
WEBSOCKET_TICKET_EXPIRE_SECONDS控制。 -
WebSocket 只发送变更通知,不发送完整任务内容。
-
每个响应都会附带
X-Request-ID,用于日志关联和故障排查。 -
默认会写入基础安全响应头,减少浏览器端误用和嵌入风险。
-
/metrics暴露 Prometheus 文本指标,至少包含按 method / path / status 标记的 HTTP 请求量、错误响应量和请求耗时直方图;生产或预发环境如果启用指标,必须配置METRICS_TOKEN,采集时使用Authorization: Bearer <token>。 -
/api/v1/observability/client-error接收已登录客户端的错误上报,并在/metrics中计入taskbridge_client_error_reports_total;上报载荷应包含客户端版本、路由、trace_id、在线状态、页面可见性、浏览器类型和脱敏后的错误堆栈,响应中的request_id用于和服务端日志关联。上报前会移除查询参数、hash、令牌和 token 类字段,避免把完整链接或认证信息写入日志。 -
Web/PWA 不持久化
refresh_token;access_token仅保存在sessionStorage。任务草稿也仅保存在当前浏览器会话中,避免长期落盘保存用户可能输入的敏感内容。 -
Web/PWA 的生产静态托管应使用 HTTP 响应头下发 CSP 和基础安全头,参考
web/_headers.example;web/index.html不再内嵌开发 CSP,避免把localhost/127.0.0.1连接策略误带到公开站点。 -
限流默认只信任直连客户端 IP;只有
TRUSTED_PROXY_IPS命中的反向代理才能提供X-Forwarded-For/X-Real-IP。 -
CSV 导出会转义公式前缀,降低表格软件公式注入风险。
-
生产环境启动时会拒绝默认
JWT_SECRET和默认数据库密码。 -
REGISTRATION_ENABLED=false可以关闭公开注册入口,适合已经完成首个账号初始化、邀请制或内网受控部署;关闭后/api/v1/auth/register返回 403。
- Release APK 优先使用正式签名。缺少签名配置时,
assembleRelease会生成 unsigned release APK,不会回退到 debug signing。 - Release 构建默认关闭 Android backup;Manifest 同时声明
dataExtractionRules和fullBackupContent,即使 debug 或测试构建允许备份,也会排除taskbridge_secure_tokens、taskbridge_device、taskbridge_sync、taskbridge.db和cache/exports等敏感或可恢复数据。 - Token 使用加密存储。
- 分享导入 TaskBridge 备份时,需要识别备份格式并由用户确认后才写入本地数据。
- Widget 操作 receiver 不对外导出。
- Electron 主窗口和悬浮窗启用
contextIsolation,禁用nodeIntegration,并启用 renderer sandbox。 - Preload 只暴露
window.taskBridge受控接口。 - Renderer 不能直接写入 Token。登录、注册和刷新 Token 后由主进程保存。
- Token 只通过 Electron
safeStorage加密保存;如果系统安全存储不可用,不会回退到明文保存 Token,旧明文 Token 会在可加密时迁移,否则清除。 - IPC handler 会校验调用方是否来自当前主窗口或悬浮窗。
- 备份导入限制文件大小、备份格式和导入条数,并会清洗字段长度。
- Release Compose 默认只暴露后端 API 端口
8000。 - MySQL 和 Redis 默认只在 Docker Compose 内部网络可访问。
.env必须修改MYSQL_ROOT_PASSWORD、MYSQL_PASSWORD、JWT_SECRET和生产指标用的METRICS_TOKEN。- 不要把
.env、keystore、数据库卷、Redis 数据卷或本地配置提交到 Git。
发布前至少运行:
cd backend
python -m pytest tests -q
python -m compileall -q app tests
cd ..\desktop
npm run check:security-config
npm run check:auth-session-config
npm run check:backend-observability
npm run check:desktop-endpoint-config
npm run buildAndroid Release 还需要确认 GitHub Secrets:
ANDROID_KEYSTORE_BASE64ANDROID_KEYSTORE_PASSWORDANDROID_KEY_ALIASANDROID_KEY_PASSWORD
Docker Hub 同步发布需要确认:
DOCKERHUB_USERNAMEDOCKERHUB_TOKEN