| 版本 | 支持 |
|---|---|
| 0.2.0 与当前主分支 | 是 |
| 0.1.0 及更早快照 | 否;请升级 |
漏洞请使用 GitHub 私人漏洞报告;入口不可用时先与维护者约定私密渠道。不要公开可复现细节或令牌。收到后 7 天内确认,修复窗口取决于严重性。
- npm dev/start 默认监听 127.0.0.1,可用 HOST/PORT 显式覆盖。容器内部监听 0.0.0.0,Compose 只发布到宿主 127.0.0.1;这两件事不同。
- 未配置 PERKRADAR_ACCESS_TOKEN 时没有身份认证,仅适合可信本机单用户。公网必须使用 TLS 反向代理并启用至少 32 字符随机访问令牌,绝不可直接开放应用端口。
- 配置令牌后首页、开发预览及 /api/deals、/api/health、/api/refresh 均要求认证。Agent 用 Bearer;网页通过 /login 换取 8 小时签名 HttpOnly/SameSite=Strict 会话。生产默认 Secure cookie,仅纯本机 HTTP 调试时可设置 PERKRADAR_SECURE_COOKIE=0,公网不能关闭。页面「退出」只清除本浏览器的 cookie;会话不在服务端存储,要让所有已签发会话失效需更换令牌。未登录跳转只会指回请求自带的 Host,格式异常的 Host 回退到监听地址。
- 改令牌即使旧会话失效;不要将令牌放 URL、源码或日志。登录全局限流每分钟 10 次,请求流实际限制 4096 字节;建议代理另加限流。
- 同源校验不能代替认证。跨站 Sec-Fetch-Site 被拒绝,Origin 存在时核对主机;不带 Origin 的命令行请求仍须通过已配置的令牌认证。
- TRUST_PROXY_HEADERS 默认关闭;仅可信代理覆盖转发头时开启。限流键有总量上限,计数保存在内存,单实例重启会清零。
- 三个数据 API 与认证响应 no-store;手动刷新保持 60 秒冷却,10 分钟最多 8 次。源请求 25 秒总预算,包含有限重试;拒绝跨源条目、非 http(s) 与带凭证 URL。
- 抓取 URL 固定,不接受调用方替换。请求仍跟随来源重定向,不能将该实现直接复用为用户可配置 URL 的抓取服务;扩展前必须加逐跳目标及私网地址检查。
SQLite 以 WAL 运行;调度租约心跳 20 秒/有效期 90 秒,刷新租约 180 秒,提交前验证所有权。只支持单机单实例,不保证跨主机共享文件系统安全,不应部署多副本。进程暂停或崩溃后由租约过期恢复,不重放所有错过的轮次;拿不到调度租约的进程待命而不是启动失败。上游 Retry-After 最多采信 6 小时。
首次启动会做事务化 user_version 迁移;升级前做一致备份,回滚旧程序前恢复升级前库,不直接把低版本程序指向新 schema。历史轮次保留 30 天并保留最新完成轮次,优惠条目沿用留存与到期规则。
只保存标题、原文链接、短摘要和时间;不保存凭证、Cookie、请求头、正文全文或个人浏览器状态。日志不应含令牌;错误不得回显密钥或密钥路径。快照仅显式配置 DEALS_SNAPSHOT_DIR 才启用。数据目录、备份、归档、代理配置中的真实凭证均不得提交。
容器以 uid 1000 非 root 运行,不用 chmod 777。浏览器收藏/已领仅本地保存,迁移保留旧键。来源条款核查边界见 docs/SOURCES.md。