【问题标题】:Where to store sensitive environment variables with Vue3?Vue3 在哪里存储敏感的环境变量?
【发布时间】:2021-03-19 22:52:55
【问题描述】:

根据 Vue 文档,我可以将环境变量存储在 .env 文件中,它们会自动加载。这很好用,但是这个页面说不要在这些文件中存储任何敏感的 ENV 变量,因为它们与构建捆绑在一起。

警告

不要在您的应用中存储任何秘密(例如私有 API 密钥)!

环境变量嵌入到构建中,这意味着任何人都可以 通过检查您应用的文件来查看它们。

https://cli.vuejs.org/guide/mode-and-env.html#environment-variables

所以,如果我正在开发一个与 API 对话的 web 应用,该 API 需要发送一个 ID 和一个秘密才能获得令牌,我应该将这些 ENV 变量(CLIENT_ID、CLIENT_SECRET)存储在哪里?

在本地,我有一个 .env.local 文件,其中包含这些值,并且我还在 Netlify 环境变量中定义它们。

【问题讨论】:

  • Cookie、文件、本地存储、浏览器存储、内存。任你选。这是一个非常特定于应用程序的事情,没有任何事情是完美的。

标签: vue.js netlify vuejs3


【解决方案1】:

任何秘密都应该只存储在您的服务器上。无论您认为它隐藏或加密得多么好,它都不应该成为您的 Vue 应用程序源代码的一部分。

一般来说,您应该让用户发送他们的用户名/密码,在服务器上创建一个令牌(查看 JSON Web 令牌以获得轻量级方法),然后(1)将其设置为 HttpOnly cookie(一个 javascript无法触摸)或将其存储在客户端的localStorage中并将其设置为axios中的通用标头(使用标头:{ Authorization: 'Bearer'}相当普遍。

现在,客户端应该在每个请求中发送回该 JWT。因此,在您的服务器上,您可以检查 JWT 是否有效,如果有效,则发回请求的数据。

【讨论】:

  • 问题是,我没有服务器。这个应用程序只是前端,它直接与我不拥有的 API 通信。此 API 要求我发送我的 ID 和密码,以便我可以获取 JWT 令牌。我的问题是:在这种(无服务器)情况下,我该如何处理这些 ID 和秘密变量?
  • 在这种情况下,您最简单的选择可能是调查使用环境变量从命令行启动应用程序(或者如果您使用的是 Node,则调查 dotenv。然后您可以访问该变量 -应用程序使用 process.env.VAR。理论上这应该提供一种保护措施。
  • 我正在使用 process.env.VAR 并在 Netlify 的 ENV 变量部分设置变量。安全吗?
  • 你的问题是任何进入你前端的东西都是可观察的。一个人所要做的就是检查网络选项卡中是否有任何对 API 的请求,并且令牌将出现在请求的标头或正文中。这就是为什么通常情况下,您有自己的服务器充当任何使用您想要保密的令牌的 API 请求的中间人。
  • 所以如果我想构建一个简单的应用程序来展示我在作品集中的技能,我总是必须在某个地方托管一个服务器来保护我的代码?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-03-29
  • 2015-05-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多