核心是不让明文敏感值落地、不随代码提交、不解密态暴露于运行时上下文之外;需通过加密存储(如Local Vault/AES-256-GCM)、运行时解密、密钥隔离三者协同实现,禁用明文存储与日志泄露。

用 Local Vault 加密(Insomnia/Postman 类工具)
这类桌面 API 工具自带加密机制,关键在于启用并正确标记:• 打开环境编辑界面,输入变量名(如 DB_PASSWORD)和值
• 点击值右侧的锁图标,标记为 Secret,值立即变为 ••••••
• 保存后,Insomnia 自动用 AES-256-GCM 加密写入本地 vault.db,密钥不出设备
• Git Sync 同步时,只传加密元数据,另一端用本地密钥自动解密,无需人工干预
用外部密钥管理服务(生产级推荐)
避免把密钥和密文绑在同一处,适合 Docker、K8s、Serverless 等环境:• 敏感变量(如 AWS_SECRET_ACCESS_KEY)不写进 .env 或 compose 文件
• 在部署时通过 HashiCorp Vault、AWS KMS 或 Azure Key Vault 动态拉取并注入
• 容器启动前由 init 容器或 sidecar 解密,再以临时环境变量形式传递给主进程
• 配置文件中只保留占位符(如 DB_PASSWORD: ${VAULT_DB_PASS}),靠运行时替换
用 AES 预加密 + 环境变量传密钥(轻量级方案)
适用于无 KMS 支持的 CI/CD 或嵌入式场景,密钥与密文分离:• 用脚本对敏感值 AES-256-CBC 加密,生成密文字符串(含 IV 和密文)
• 将密文存入配置文件(如 config.json 或 .env.enc)
• 部署时通过环境变量传入密钥(如 ENCRYPTION_KEY=32_byte_hex_string)
• 应用启动时读取密文和密钥,调用 crypto 模块解密后才赋值给 process.env.DB_PASSWORD
规避常见错误
很多泄露不是因为没加密,而是操作失当:• 不把 .env 文件加入 .gitignore,导致密钥随代码上传
• 在日志、错误堆栈或调试响应中打印 process.env 全量内容
• 用同一个密钥加密多类数据(如既加密数据库密码又加密 JWT 秘钥),违反密钥隔离原则
• 在前端 JavaScript 中直接引用 process.env.SECRET_KEY,造成密钥完全暴露


















