【免费下载链接】envelopeAn environment variables cli tool backed by SQLite项目地址https://gitcode.com/gh_mirrors/envel/envelope点击查看免费下载envelope是一个用 Rust 编写、以 SQLite 为后端的环境变量管理器。它最让新手安心的两个能力用--stdin参数录入密钥、避免密码写入 Shell 历史以及用lock命令对整个数据库文件做密码加密。本文带你快速掌握这两项机制并附一份 5 条的环境变量防泄漏清单。️ 一、环境变量为什么总在泄漏先看看最常见的 3 个泄密现场泄漏渠道典型场景后果Shell 历史envelope add prod KEY sk-123456密钥明文进了.bash_history共享机器上他人可查历史明文数据库文件.envelope是一个 SQLite 文件谁拷走谁就能读API Key、数据库密码全部暴露误提交到 Git忘记加.gitignore密钥文件进仓库密钥永久留存在版本历史里envelope 针对前两条泄漏渠道分别提供了--stdin和lock加密两个内置方案。⌨️ 二、--stdin让密钥绕开 Shell 历史问题在哪直接把密钥写在命令行里$ envelope add prod database_password Pssw0rd123这个值会原样记录在你的 Shell 历史~/.bash_history、~/.zsh_history里任何能读你历史记录的人或脚本都能拿到它。--stdin 的正确姿势给add命令加上--stdin参数envelope 就会切换到交互提示模式从标准输入读取值$ envelope add prod database_password --stdin Enter value for env database_password: Pssw0rd123这样做的安全收益✅ 密钥不出现在命令行参数中Shell 历史里只留下--stdin本身✅ 适合在公共终端、结对编程、录屏演示时录入敏感值✅ 变量名仍会显示在屏幕上所以只遮值、不遮名属正常现象 实现逻辑很简单当--stdin为true时程序不再接收 value 位置参数而是直接调用stdin.lock().read_line()读取一行。--stdin与显式传值互斥同时传会报错。参见 src/command/client/add.rs。此外import命令同样支持管道输入可以一行命令把.env文件灌入指定环境$ cat .env | envelope import prod 三、lock 加密给整个数据库上密码锁envelope lock会把整个.envelope数据库加密成一个密文文件从此没有密码就什么都读不到。$ envelope lock Password: ******** Confirm password: ******** database locked successfully加密后再想查看必须先解锁或临时输密码$ envelope list dev # 提示需要密码 / 先执行 envelope unlock $ envelope unlock Password: ******** database unlocked successfully它到底用了什么加密打开加密核心 src/core/crypto/mod.rs能确认 envelope 采用的是教科书级组合环节算法说明密钥派生Argon2id内存成本 256 KiB、3 轮迭代、8 线程抗 GPU 暴力破解对称加密XChaCha20-Poly1305AEAD 认证加密篡改一个字节都会解密失败盐值 / 随机数每次加密随机生成16 字节 Argon salt 24 字节 nonce存于 53 字节文件头几个新手值得知道的细节 文件头结构魔数 版本号 salt nonce定义在 src/core/crypto/header.rs魔数中包含ENVELOPE字样方便在十六进制里一眼识别️ 文件头被绑定为 AAD附加认证数据篡改头部同样会导致解密失败 密码读取后包裹在ZeroizingString中用毕即从内存擦除见 src/utils.rs 加密后的文件通过临时文件 原子重命名写盘中途断电也不会留下半个坏文件见 src/core/state/locked.rs锁定状态下能干什么不用担心 lock 会把工作流打断。查看 src/command/client.rs 的调度逻辑锁定状态下几乎所有命令都可用——envelope 会先提示输密码、把数据库解密到内存执行若产生修改再自动重新加密写回。也就是说临时查一次envelope list dev→ 输一次密码即可持续工作先envelope unlock干完活再envelope lock✅ 四、5 条环境变量防泄漏清单把上面两条机制和官方最佳实践见 README.md 的 Security Best Practices 章节合起来得到这份可直接照做的清单#措施怎么做防住什么1数据库进.gitignoreecho .envelope .gitignore密钥误提交到 Git2敏感值一律用--stdinenvelope add prod secret_key --stdinShell 历史留痕3空闲时执行envelope lock下班前 / 提交代码前锁库明文数据库被拷走4环境严格分离dev/staging/prod分开存用envelope diff dev prod核对生产配置混进开发环境5定期审计历史envelope history prod api_key异常变更与遗留旧值⚠️ 特别提醒envelope 的delete是软删除历史值仍保留在库中以便revert恢复。如果一台机器彻底弃用、需要物理清除密钥请用envelope drop env硬删除整个环境它不可恢复。 五、进阶两个安全放大器run --isolated最小化注入面$ envelope run prod --isolated -- my-app--isolated让子进程只继承所选环境里的变量 PATH父 Shell 里的其他变量一律不可见。跑 CI、容器构建脚本时特别好用——从源头减少顺手带出去的敏感变量。history revert改错了不慌张每次增删改都会留时间戳记录envelope history可查全部历史值envelope revert可一步步回退。对安全审计来说谁在何时把API_KEY改成了什么一目了然。 六、总结--stdin密钥不进命令行、不进 Shell 历史 —— 录入环节的防泄漏lockArgon2id XChaCha20-Poly1305 全库加密 —— 存储环节的防泄漏5 条清单.gitignore隔离 --stdin 定期 lock 环境分离 历史审计构成完整闭环更多命令细节可查阅随项目附带的手册页 man/envelope.1.md数据库表结构演进见 migrations/ 目录。把.envelope当成装密钥的信封来管理平时锁好用时才拆泄漏自然无从发生。赞分享【免费下载链接】envelopeAn environment variables cli tool backed by SQLite项目地址https://gitcode.com/gh_mirrors/envel/envelope点击查看免费下载相关推荐Node.js 密钥管理实战环境变量、加密存储与防泄漏审计nodebestpractices 安全指南Node.js 密钥管理实战环境变量、加密存储与防泄漏审计nodebestpractices 安全指南 密钥API Key、数据库口令、云服务凭据一旦文档教程后端Node.js 机密管理实践指南从环境变量、加密存储到泄漏防线nodebestpractices 安全实践 6.3Node.js 机密管理实践指南从环境变量、加密存储到泄漏防线nodebestpractices 安全实践 6.3 本指南对应 nodebestpract文档教程后端5个终极安全技巧防止env环境变量泄露的完整指南5个终极安全技巧防止env环境变量泄露的完整指南 在Go应用开发中环境变量管理是安全配置的核心环节。env库作为一个简单、零依赖的库专门用于将环境变量解析后端上一篇邱锡鹏团队出手MOSS-Image 上线一周国产文生图多了一张新牌下一篇GitHub 榜位第四star 从 8000 涨到 10.8k这个 Rust 写的记忆服务凭啥压过一堆向量数据库创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
阅读完成 · 觉得有帮助?