谈谈保密那些事——使用环境变量存储我们的密钥

958 阅读5分钟

随着最近学习的较之前深入了一些,在学习时也或多或少牵扯到了一些私有性的东西,例如在学习Prompt Engineering之中涉及到了openai的密钥,这个东西是我们个人的,不能随便的传播出去,不然轻则我们的账号会被封禁,重则我们里面的一些重要文件就会丢失。

164F7425BF2D09AF34F2A4D8B5956E04.png

就好比我们的微信密码,我相信我们的微信密码不会轻易的给其他人。尤其是我们的女朋友,不然的话里面跟小姐姐的聊天都给他发现了。

如果我是个大马哈,那么我的api-key现在就在上一篇的文章中了。还好我不是!

那么问题来了!我们该怎么妥善处理我们的api-key呢?

1.不要在代码库中硬编码API密钥。 这包括源代码、配置文件或任何可能被提交到版本控制系统(如Git)的地方。

2.使用环境变量存储API密钥。 这样可以在不同环境中(如开发、测试和生产)轻松切换而不泄露敏感信息。

3.限制访问权限。 为不同的使用场景或应用程序分配具有最小必要权限的API密钥。避免使用具有全面访问权限的密钥。

4.定期轮换密钥。 定期更换API密钥,并在怀疑密钥已泄露时立即更换,以降低风险。

我在这里主要使用的就是用环境变量来存储我们的API密钥

怎么使用环境变量来存储api-key呢?

环境变量为什么可以存储api-key?

在我们传统的编程中,环境变量经常用来指定系统目录和重要文件的位置,如临时文件夹、库路径、系统工具路径等,帮助程序找到必要的执行文件和资源。就比如说我们在执行java程序时,我们需要将我们下载的jdk配置一个环境变量,这样才能够让我们编写的java程序跑起来。

环境变量的另外一个作用就是可以存储一些私密的api密钥。环境变量存储秘钥的原理主要基于操作系统的特性,以及应用程序如何与操作系统交互来获取这些变量。操作系统提供了一种机制,允许程序在启动时继承一组环境变量,这些变量通常包含了路径信息、系统配置等。环境变量以键值对的形式存在,例如 API_KEY=your_secret_key。虽然环境变量在内存中对进程可见,但操作系统通常会限制进程只能访问自己及其祖先进程设置的环境变量,这形成了一个基本的安全隔离机制。

用环境变量存储api-key的优点

  1. 安全性

    • 隔离敏感信息:环境变量不存储在源代码中,这样可以防止版本控制系统(如Git)意外包含这些敏感数据,减少了信息泄露的风险。
    • 运行时注入:在应用运行时动态注入环境变量,意味着密钥不会以静态文本形式出现在任何持久化存储介质上,增加了攻击者获取密钥的难度。
    • 访问控制:操作系统级别的环境变量访问权限可以被严格控制,只允许特定进程访问,进一步增强了安全性。
  2. 灵活性

    • 多环境配置:不同的环境(如开发、测试、生产)可以有不同的环境变量设置,便于根据环境调整API密钥或其它配置,而无需改动代码。
    • 动态调整:环境变量的值可以根据需要更改,无需重启服务(某些情况下),这对于快速迭代和即时配置更改非常有用。
  3. 团队协作

    • 避免泄露:开发者在协作时,不需要直接分享API密钥,每个人可以在自己的开发环境中设置,降低了密钥泄露的风险。
    • 简化流程:团队成员可以专注于代码逻辑,而不必关心配置细节,有利于维护代码仓库的纯净度和专注度。

在node中如何利用环境变量存储api-key?

1.安装dotenv库: 首先,你需要安装dotenv包,在node中我们可以通过npm i dotenv这一命令安装。

2.创建.env文件: 在项目根目录下创建一个.env文件,然后在这个文件里添加你的API密钥

# OPENAI
OPENAI_API_KEY = sk-XXXXXXXXXXXXX

# 数据库
MYSQL_USER = root
MYSQL_PASSSWORD= 123456

上面只是个示例哈,不是真的!哈哈哈

3.加载环境变量:引入dotenv模块并调用了config()方法,dotenv这个模块会将 .env文件中的配置项添加到环境变量中

require('dotenv').config();  

4.使用它:在应用中通过process.env.API_KEY访问到API密钥

 apiKey: process.env.OPENAI_API_KEY,

结束语

一天的忙碌,终于结束了,可要保存好自己的密钥啊,别到时候谁把我的成果给删除了。哈哈哈哈,应该不会有人删我的这个吧!我们都是成年人啦,要注意保密哟,保护好自己的信息哟,不要被不法分子给搂了。希望各位大佬们看的好的话给小弟一个小小的赞。

0D1BAF9A.jpg 52149175DEC33E29D695216605CD1784.gif