在Node-express应用中将机密存储在何处

时间:2019-01-31 20:57:34

标签: node.js

在Node-express应用程序中存储机密的最佳位置是什么。

以前,我曾经将其存储在.env文件中,并使用npm dotenv扩展名并通过执行类似这样的操作来传递它

process.env.MYSECRET

但是看来这不是正确的方法。为什么?一次

  

Firebase CLI当前不允许您设置流程环境   变量o

我遇到的另一种方法是创建一个包含我们所有API密钥的配置文件,并将其放在gitignore中,但我不想一遍又一遍地从我的配置文件夹中导入它。

很困惑,想在这里问

2 个答案:

答案 0 :(得分:0)

将机密信息存储在环境变量中并不安全,因为像my-db-pw这样的简单命令会显示所有环境变量及其值。另外,任何日志转储都可能包含该文件,但这不是那么安全。

一个更好的选择是将密钥存储在配置文件中,例如componentDidMount() { const dayNumber = parseInt(this.props.match.params.number); jQuery.ajax('http://localhost:9018/api/day/' + dayNumber) .done((result) => { this.setState({ day: result, status: 'SUCCESS', }); }) .fail(() => { this.setState({ status: 'ERROR' }) }); } (愚蠢的示例),并在引导应用程序时从密钥值存储中读取值。如果您正在使用AWS(就像我们一样),则使用AWS Secrets Manager。无论如何,您的密码最终都会存储在RAM中,这比env变量安全一些。而且,您不需要每次都需要密码时调用秘密存储:只需在应用加载时调用一次即可,这可以满足大多数需求。如果密码失败,那么您可以编写代码以重新检索它们。

话虽如此,一种更好的方法是对它们进行哈希处理。但是,这似乎有点不合时宜,但是here's是一个很好的起点,并且此来源here对此进行了扩展。基本上,哈希是一种单向算法。假设您的密码是“ 123”,并且哈希变成“ sadcdsc-324”。然后,当例程(程序)比较两个密码时,它还将在内部散列“ 123”并得到相同的“ sadcdsc-324”,这就是要进行比较的内容。抱歉,这不是主题,但我想提一下也是为了彻底。

最后,有加密功能,但是对于您所描述的情况,这通常是过分的。

总而言之,似乎本地文件配置足以满足您的需求,因为RAM仍然比env变量更安全。如果需要更高的安全性,可以如上所述添加哈希。

答案 1 :(得分:0)

服务器密钥只能访问API密钥之类的秘密,如果保存到文件中,则使用.gitignore规则排除在源代码之外。

Firebase NodeJS云功能解决方案:

示例:

$ firebase functions:config:set myapp.apikey=https://hooks.slack.com/services/XXX

然后从本地仿真器或已部署的代码中使用:

const functions = require('firebase-functions');
const apikey = functions.config().myapp.apikey;