浏览 AI使用教程

API Key 怎么放环境变量:避免进入仓库、构建产物和日志

把 API Key 放进环境变量只是第一步。仓库历史、构建日志、错误日志和前端产物仍可能泄漏秘密,需要逐处检查并准备轮换。

按实际操作顺序推进

每完成一段就检查当前输出,确认结果符合预期后再继续。

  1. 01准备动手前,把材料和不能改的部分定下来
  2. 02执行先用占位值完成设置、读取和忽略
  3. 03检查为什么“仓库扫描无密钥,浏览器仍能看到 Key”还不能交付
  4. 04完成密钥位置清单与泄漏检查结果通过哪些检查才算完成
从手头这一份材料开始

密钥已经移进 .env,为什么仍然可能泄漏

API Key 已从代码移到 `.env`,但 `.env` 被提交,构建日志又打印了完整请求头。所谓使用环境变量并没有消除泄漏。

仅用公开占位值 lesson-not-a-secret;没有访问真实 API,也未执行任何真实密钥轮换。

  • 终端和程序只报告是否存在,不回显值
  • 本地环境文件被忽略且未跟踪
  • 真实泄漏需在服务端撤销,删文件不能使旧凭证失效
本例材料

动手前,把材料和不能改的部分定下来

需要确认本例内容
现有材料Node.js 20.6+、PowerShell、一个练习 Git 仓库;创建 .env.local、.gitignore 和 check-env.mjs。
不能越过的边界密钥不进入源码、历史、镜像、前端包、日志和截图;生产使用受控 secret store;发现泄漏先撤销轮换。
要交付的结果密钥位置清单与泄漏检查结果
实际操作

API Key 怎么放环境变量,从“设置一个占位变量”开始做

设置一个占位变量

先用当前终端变量练习读取;关闭窗口后该赋值不持久保存。

改为本地文件

在练习目录创建 .env.local 与忽略规则,确认 Node 版本支持 --env-file。

只输出存在性

服务端通过 process.env 读取,缺失时失败;不要把完整环境或请求头写到日志。

检查 Git 与浏览器边界

忽略规则不影响已经跟踪的文件;检查 git ls-files,并确认密钥没有被打进前端。

再接真实凭证

按供应商自己的权限与撤销机制替换占位值;若真实值曾暴露,先撤销再处理历史。

Node.js 20.6+ / PowerShell

先用占位值完成设置、读取和忽略

check-env.mjs

只检查是否存在

const present = Boolean(process.env.DEMO_API_KEY?.trim());
console.log(`DEMO_API_KEY present: ${present}`);
if (!present) process.exitCode = 1;
PowerShell

当前终端变量

$env:DEMO_API_KEY = 'lesson-not-a-secret'
node check-env.mjs
Remove-Item Env:DEMO_API_KEY
.env.local

文件中的教学占位值

DEMO_API_KEY=lesson-not-a-secret
.gitignore

合并进现有忽略规则,不覆盖原文件

.env.local
PowerShell

读取文件并验证 Git 状态

node --env-file=.env.local check-env.mjs
git check-ignore -- .env.local
git ls-files -- .env.local

预期第一条输出 true;check-ignore 输出 .env.local;ls-files 无输出。若 ls-files 输出文件名,说明已跟踪,不能因 .gitignore 存在就认为安全。环境中同名变量会优先于 --env-file;先移除教学终端变量再比较。

读取成功之后还要检查哪里

本例程序仅在 Node 服务端读取值。把值放进浏览器 JS、静态构建变量或返回给页面,就会向访问者公开;环境变量并不自动保密。

忽略文件只解决今后的常规添加。曾提交真实值时要在供应商控制台撤销;历史改写会影响协作者,应另行规划。扫描结果不能证明所有日志和缓存都没有副本。

语法与覆盖关系参见 [Node --env-file](https://nodejs.org/api/cli.html#--env-filefile)。

最终输出

完成后的密钥位置清单与泄漏检查结果

预期只输出 DEMO_API_KEY present: true;git check-ignore 命中 .env.local。这个结果只证明本地读取与忽略规则,不证明 Git 历史、CI、前端包或真实服务轮换安全。

常见失败

为什么“仓库扫描无密钥,浏览器仍能看到 Key”还不能交付

仓库扫描无密钥,浏览器仍能看到 Key

原因
变量被注入前端构建或接口返回
怎么改
检查最终 JS 包和网络请求,服务器端代理敏感调用,立即轮换已暴露凭证
验收方式

密钥位置清单与泄漏检查结果通过哪些检查才算完成

依据与范围

本页实际使用的资料