簡體   English   中英

如何在生產中安全地使用環境變量秘密

[英]How to use environment variables secrets safely in production

我想使用環境變量來安全地保存 pm2 的秘密。

我有一個快速支持的服務器的反向代理,該服務器每次連接執行查詢時都使用帶有密碼的數據庫。

我想從程序中正常訪問它:

procsess.env.my_secret

但我假設在運行時簡單地設置變量,如下所示是不安全的:

MY_SECRET="secret password" pm2/node my_api_server.js

考慮到我使用的是 pm2 並且我希望變量在重啟/崩潰時保持不變,我應該如何設置秘密密碼?

我應該注意到,不同的環境處理和通過 VCN 將代碼傳遞給其他開發人員對我來說不太重要。

在過去的帶有需要連接到數據庫的 Express 后端的 ReactJS 項目中,我在 NPM 上使用了dotenv包。 一旦作為依賴項添加到您的項目中,您將在服務器文件結構的根目錄中創建一個隱藏的 .env 文件。

在該 .env 文件中,您可以創建環境變量。 這些變量需要以 REACT_APP 為前綴,如下所示:

REACT_APP_DBURI=<conn string here>
REACT_APP_MAILGUN_API_KEY=<key string here>
REACT_APP_CAPTCHA_SECRET_KEY=<key string here>

您需要在代碼中按如下方式要求包:

require('dotenv').config();

您可以在 server.js(或其他)代碼中將它們引用為:

process.env.REACT_APP_VARIABLE_NAME

這篇 Medium 文章有一個完整的解釋。

希望這可以幫助!

使用 .env 存儲 API 密鑰或憑據會暴露給生產中的客戶端!
通過 React 文檔 -

警告:不要在你的 React 應用程序中存儲任何秘密(例如私有 API 密鑰)! 環境變量嵌入到構建中,這意味着任何人都可以通過檢查您的應用程序文件來查看它們。

建議將所有 env 密鑰直接存儲在服務器上,服務器應用作客戶端和 API 之間的中間點。 這樣密鑰直接應用在服務器上,不會暴露在前端。 您可以查看有關如何在特定服務器上設置 env 變量的相應文檔。

前端代碼

fetchData = () => { 
    fetch('/users', { method: 'POST', body: JSON.stringify(data) }
   .then(res => res.json())
    }

服務器代碼

app.post('/users', (req, res) => {
    const API_KEY = process.env.API_KEY;
    connection.query(`/apiPath/${API_KEY}`)
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM