ResumeForge 是面向个人、本地运行的单用户工具。它会处理简历、联系方式、照片、经历总结和大模型 API Key 等敏感信息,因此请先理解下述安全边界。
| 版本 | 安全更新 |
|---|---|
main / 最新发布版 |
支持 |
| 更早的提交或自行修改版本 | 不保证 |
请优先使用代码托管平台的私密安全公告功能(GitHub 仓库中的 Security → Advisories → Report a vulnerability)。如果该入口不可用,请通过仓库维护者公开资料中的私密联系方式报告。
不要在公开 Issue、截图或日志中包含:
- API Key、访问令牌或完整请求头;
- 真实简历、照片、联系方式或经历总结正文;
- 本地数据库、
.env文件或可还原个人信息的导出文件。
报告中请提供受影响版本、复现条件、影响范围和已做的最小化验证。维护者会尽快确认收到报告;修复公开前请避免披露可直接利用的细节。
- API Key 在 Windows 上用系统 DPAPI 加密后保存在本地 SQLite 数据库中(密文绑定当前用户与机器),非 Windows 平台保持明文,以换取零依赖的单用户零配置体验。普通配置读取和配置记录接口始终返回脱敏引用;只有用户点击设置页的显示按钮时,直接连接回环地址的客户端才能通过
POST /api/settings/llm/api-key/reveal临时读取当前密钥。该响应禁止缓存,前端在隐藏、取消、保存、修改服务地址或切换配置后清除显示值。此限制不能替代身份认证,不要共享backend/data/resume_forge.db,并保护操作系统账户和磁盘。 - 生成简历和岗位化建议时,相关岗位信息、经历/项目/技能及被选中的总结文件片段会发送给用户配置的大模型服务商;照片、姓名、联系方式等身份字段不会进入模型上下文。岗位需求解读只发送招聘信息,不读取个人资料。使用前请确认服务商的数据政策。
- 简历照片保存在本地,不进入大模型上下文;导出的 HTML 或打印文件可能包含照片和其他个人信息。
- AI 求职助手默认只发送当前问题和受限的已完成会话历史。只有用户明确选择关联岗位、关联简历或“使用我的资料”时,相关内容才加入本次上下文。“使用我的资料”会移除照片、姓名和联系方式;关联简历只移除照片,正文中的姓名和联系方式仍可能发送。助手可以通过工具调用读写本地数据。写入(新增/修改岗位、更新个人资料基础字段)只在用户明确要求时触发,且没有任何删除类工具;设置里的模型配置与数据集管理有回环强制校验,不做成工具,以免模型间接绕过该边界。
- 助手会话、消息、附件和联网来源摘要保存在本地 SQLite。删除会话会删除其消息历史;数据库备份仍可能保留旧副本。用户主动上传到助手的图片与资料照片不同:当前消息的图片会发送给所选模型,且只有兼容 OpenAI
image_url输入的多模态模型才能正确处理。 - PDF/DOCX 附件的原始文件不外发:后端在本机提取文字(pypdf 读 PDF、白名单成员读 DOCX),只把提取结果作为文本送入模型上下文(岗位与资料识别的文档同理),因此文档识别不需要多模态模型,也不会把文件本身交给服务商。BMP/TIFF 图片同样在本机转成 PNG/JPEG 后再发送。扫描件提取不到文字时会明确提示改用截图,而不是静默留空。
- 助手附件仅接受 UTF-8 TXT/Markdown/JSON/CSV、PDF/DOCX,以及 PNG/JPEG/WebP/GIF/BMP/TIFF 图片,最多 4 个,单个不超过 2 MB、合计不超过 5 MB;服务端会校验文件名、MIME、文件头签名与 base64。解析这些不可信文件时另设上限:PDF 最多读 30 页、提取文字总量封顶、图片解码像素封顶、DOCX 只读
word/document.xml而不解压整包。格式与大小限制不能替代内容脱敏,上传前仍应删除无关个人信息和密钥。 - HTTP 客户端的默认 INFO 请求摘要已关闭,避免把助手联网搜索词作为完整 URL 写入日志;业务日志只记录排障所需的主机、状态码、计数和请求 ID。
- 开启联网搜索后,助手会获得一个搜索工具:它自己决定查什么、可以换关键词多搜几次(一次回答最多 3 次),查询词发送到
https://cn.bing.com/search(该域不可用时回退https://www.bing.com/search)。后端只读取受限大小的 RSS 标题、URL 和摘要,不跟随结果链接或抓取网页正文;结果按主机名与路径去重,用人单位官网与招聘页排在第三方平台之前。助手被要求优先参考用人单位官网,但搜索摘要可能过期或来自第三方,不能视为官方性或招聘有效性的验证。关闭开关时不会下发该工具。 - 自动采集与自动投递会主动访问招聘网站,但仅限用户显式触发的那一次,不会在后台自动运行。链路通过一个由应用自己拉起的「投递专用浏览器」完成,它使用独立的
user-data-dir,与你日常使用的浏览器相互隔离。应用不收集、不输入、不保存招聘网站的账号密码,也不读取或保存登录 Cookie:首次登录由你在该专用浏览器窗口里自己扫码完成,凭据只存在于该浏览器的数据目录内。投递与采集日志对账号密码、Cookie、请求头等凭据脱敏,只记录排障所需的步骤、状态与错误类别;遇到验证码或安全验证时不尝试绕过,如实记为失败并提示手动处理。对外分享日志或导出文件前仍应自行核对。 - 默认部署只应监听本机回环地址。CORS 不是身份认证,不要将后端端口直接暴露到局域网或互联网。
- 安装依赖时使用仓库中的锁文件/版本清单,并审查 Dependabot 和 CI 依赖审计结果。
- 使用权限范围最小、可单独吊销的 API Key,并定期轮换。
- 定期备份数据库;可运行
backend/scripts/backup_database.py创建一致性 SQLite 备份,备份文件仍应加密并放在受控位置。 - 对外分享日志或导出文件前先移除个人信息。
- 删除不再需要的助手会话,并在发送附件、岗位、简历或资料前检查当前配置的模型服务商和其数据保留政策。
- 使用自动采集或自动投递前,先确认目标招聘网站允许自动化操作;登录凭据由你在投递专用浏览器里自持,不再使用时可在该浏览器中登出并清理其数据目录。
- 从可信来源获取项目,并核对依赖更新和发布说明。