free-llm-api-resources 安全加固:免费 LLM API 清单的防泄漏实操手册

📅 2026/8/24 14:57:58
free-llm-api-resources 安全加固:免费 LLM API 清单的防泄漏实操手册
free-llm-api-resources 安全加固免费 LLM API 清单的防泄漏实操手册【免费下载链接】free-llm-api-resourcesA list of free LLM inference resources accessible via API.项目地址: https://gitcode.com/GitHub_Trending/fre/free-llm-api-resources对免费 LLM API 清单项目 free-llm-api-resources 做一次安全体检第一步不是读 README而是把整个仓库 grep 一遍找硬编码的 token。clone 下来跑一次git clone https://gitcode.com/GitHub_Trending/fre/free-llm-api-resources cd free-llm-api-resources grep -rn eyJ src/你大概率会命中一条一个上百字符的 JWT 被原样贴在请求头里躺在公开文件中任何访问者、任何扫描器都读得到。同一个仓库里每天凌晨的定时 CI 还以 DEBUG 级别跑收集脚本把各家外部 API 返回的完整报文原样打进日志。这个项目做的事很朴素汇总「能直接用的免费 LLM 推理 API」——哪些服务商提供免费模型、每个模型的速率限制是多少一个脚本遍历十几个服务商拉取模型列表每晚重新生成 README.md。它不对用户提供服务、不存用户数据但开源属性放大了两类风险凡是碰过这条流水线的密钥全世界都看得到凡是外部 API 返回的不可信数据都有机会写进公开文档。代码里到底哪些地方在裸奔我们按数据流向逐行过一遍。 密钥在哪里暴露顺着凭证与数据流走一遍凭证进入密钥怎么进来的密钥进系统走两条路两条路长得完全不一样。本地运行时脚本开头load_dotenv()从工作目录的.env读密钥.env已被写进.gitignore这部分做法是对的。CI 侧工作流把GROQ_API_KEY、CLOUDFLARE_API_KEY等 10 个 secret 注入 runner 环境这是开源项目的标准姿势。但 src/pull_available_models.py 里有一个例外fetch_ovh_models没读环境变量token 直接写死在源码里。apikey: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9..., authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...,这个 JWT 解码后role: anon有效期到 2029 年。提交进公开仓库意味着它对所有人生效写死又意味着它不会轮换——暴露窗口不是直到被发现而是直到有人想起来。对照之下同一脚本里的 GCP 凭证根本没进仓库工作流通过 workload identity federation 在运行时换取短期 ID token用完立即删除凭证文件。同一个文件里两种写法差着一代。数据出去日志里有什么上传了什么所有外呼请求都走 HTTPS风险在细节上get_groq_limits_for_stt_model把本地 mp3 文件上传给 Groq 探测速率限制。文件用open()裸开、没有with句柄不关闭内容也没有哈希事后无法校验上传的就是那份文件。日志器一律 DEBUG 级别fetch_groq_models把完整模型列表json.dumps打进日志失败时直接logger.error(r.text)输出原始响应体。服务商的错误响应是不可信内容而 CI 的python -u会把这一切实时灌进公开日志——错误体里若回显了请求细节就是现成的泄漏。不可信数据不止留在日志里。fetch_github_models从 marketplace 页面拿到的名字被原样写进 READMEret_models.append( {id: model_data[name], name: model_data[friendly_name]} )friendly_name是服务商侧可控的外部数据README 又是公开渲染的 Markdown 文档。它若夹带构造好的链接语法就会以活链接的形式出现在 README 里被每个访问者点击。低概率但一旦发生影响面是整个项目读者的信任。列表维护谁在守模型变更src/data.py 里的模型映射表和忽略清单靠人工维护src/requirements.txt 的 4 个依赖全部锁死版本后者是好的做法保持住就行。readme-change-validator 工作流会拒绝只改 README.md、不改脚本或模板的 PR——这是一道简单的不允许绕过生成器手改产物闸门。PR 模板里还写了服务商准入标准是否正规公司、是否有商业模式、是不是逆向工程服务属于人工评审的守门条款。问题清单已经清楚了。下面按今天改到明年建的次序给出路线。分三步加固从本周到明年怎么做本周能做什么摘掉写死的 OVH JWT改从 CI secret 读取并立即吊销那个 token——已泄漏的密钥只有吊销才作数改代码不等于安全。日志器统一升到 INFO 及以上删掉json.dumps全量倾倒和r.text原文输出——日志里该有收集到多少个模型而不是内容本身。mp3 上传改为with open(...) as f——两字符改动消掉一个真实的句柄泄漏。本季度要补什么给所有服务商密钥设定期轮换90 天优先有计费和免费额度的——脚本只读但 Groq、Cloudflare 的 key 挂在真实账号上泄漏后可被用来刷免费额度。secret 按服务商拆分CI 任务只注入自己用到的 key——现在 10 个 key 挤在同一个 workflow任何一步日志出事的波及面是 10 个。对写入 README 的模型名做字符集白名单或转义——把外部数据 → 公开文档这条路堵死。依赖升级评审固化成流程升级机器人开 PR、人工合入——版本已经锁了缺的是谁在审升级。长期要建什么PR 流程挂密钥扫描器gitleaks 之类对 diff 和全仓库扫描——防 OVH 这种事故复发不靠人眼。把 PR 模板里的服务商准入标准变成合入前必查清单逐项写进 PR 描述——人工治理已经存在把它固化成流程。记录每次 README 重新生成的触发者、时间与触发方式——README 是这个项目的公开承诺它的变更轨迹应当可追溯。这些动作与 NIST AI 风险管理框架AI RMF里的 Govern 和 Map 维度是重合的但不必引入整套框架用它校验两件事即可是否清楚自己接触哪些外部输入Map、新增服务商由谁拍板Govern。两件事清楚了方向就不会跑偏。划出边界现阶段哪些事不用做云密钥提交进公开仓库、几分钟内被爬虫扫走、账号被刷出费用这类公开事件共性只有一个长生命周期密钥放在了公开位置。上一节路线图的短期 token、secret 注入、轮换、扫描全部对准这一点说明方向没有过度设计。也明确说清楚哪些事不需要做。这个项目是清单不是服务不需要零信任网络架构——没有在线服务可防护就是一个每天跑一次的 cron 脚本。不必自建 KMS 或部署 Vault——CI 提供商的 secret 存储加短期 token已经覆盖这个体量的密钥使用。不用建模型安全评级体系——项目是列表而非推理网关模型本身的安全性归服务商负责。维度当前状态加固后状态凭证存储源码写死 1 个 JWT其余在 CI secret全部来自 secret 或短期 token90 天轮换日志内容DEBUG 全量倾倒、原始错误体仅 INFO 级摘要外部数据模型名原样写入 README白名单转义供应链依赖与 action 均锁版本增加 PR 密钥扫描可以今天划掉的 7 件行动项从源码中移除写死的 OVH token并吊销对应 JWT日志级别升到 INFO删除全量报文倾倒与原始响应体输出PR 流程加入密钥扫描器gitleaks 或同类写入 README 的模型名做转义或白名单校验为 10 个 CI key 设定轮换期限并写进仓库文档mp3 上传改为上下文管理器服务商准入清单写进 PR 模板并设为必填下次 clone 这个仓库再 grepeyJ不会再出现在结果里下一次凌晨 CI 的日志里只剩收集到多少个模型的摘要marketplace 页面上那个可能夹带的名字也进不了公开的 README。清单会继续更新流水线会继续跑只是密钥不再进日志。【免费下载链接】free-llm-api-resourcesA list of free LLM inference resources accessible via API.项目地址: https://gitcode.com/GitHub_Trending/fre/free-llm-api-resources创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考