【问题标题】:How safe is .env file when using it with nodeJS?.env 文件与 nodeJS 一起使用时有多安全?
【发布时间】:2022-10-21 22:23:07
【问题描述】:

我目前正在开发一个 PWA 商店,它有一个 nodeJS SSR(服务器端渲染)并使用 React。

所以我正在使用 dotenv 并在项目中创建了一个 .env 文件,该文件被注入到 nodejs 服务器中。

然后,我将 webpack 配置为也将这些变量注入到前端包中。

我的问题:

  1. 在服务器端呈现应用程序的上下文中将 .env 文件与 nodeJS 一起使用有多安全?可以以某种方式访问​​文件吗?
  2. 在前端注入这些变量有多安全?我目前正在通过修改这样的插件来做到这一点:
    new _webpack.default.DefinePlugin({
    'process.env': JSON.stringify(process.env)})
    

【问题讨论】:

  • 一般来说,injecting those variables本身应该是一种安全的方式,因为这是编译器的工作方式,就像 C/C++ 中的Create-React-App recommanedmacro。但你应该照顾如何注入,可能与您的 Q1 有某种关系。
  • 可能没有绝对安全的方法来防止文件被黑客攻击;但我相信现代节点服务器(如 next.js 应该会很好地处理它,你可以阅读更多的源代码;但请记住,你永远不应该在你的 env 文件中存储密码或任何敏感令牌,使用另一个方法。
  • 2.不安全。 process.env 可能包含敏感信息:数据库连接字符串、JWT 机密等。常见的方法是过滤您向客户端公开的变量。例如,您可以像 CRA 一样使用前缀或声明白名单。
  • @YuryTarabanko 我相信你是对的。我错过了 process.env 都被字符串化为 process.env 宏的观点。

标签: node.js reactjs progressive-web-apps server-side-rendering dotenv


【解决方案1】:

env 文件主要是为了在不同的环境中执行源代码而创建的(例如家庭计算机与办公室计算机,其中数据库凭据等某些属性会有所不同)。

除此之外,它本质上还用于存储与源代码分开的敏感信息,因此如果您让您的开发人员朋友处理您项目的源代码,他们不应该知道您的数据库在您系统中的位置,并且将不得不为源代码所需的相同键创建自己的 env 文件,这取决于他们的系统。

现在,对于后端项目,源代码不应该与世界共享,因此在后端使用 env 文件将与您的源代码一样安全,即只有那些可以直接访问运行您的后端机器的人project 将能够访问该特定环境的 env 文件。

对于前端项目,源代码被认为是与世界共享的(就像用户接收完整 html/css/js 内容的网页)。在前端使用 env 文件只应在处理项目时考虑,因为很明显源代码将呈现给每个用户,因此在准备前端时使用的 env 值也是如此。前端 env 的目的缩小到仅支持不同的发布环境(如 beta 版本、生产版本,将在已发布的前端应用程序中具有不同的 env 以进行区分,但不会保持私有)。因此,面向前端项目的 env 文件不应包含任何敏感内容。

如果您在源代码的渲染部分使用 env 文件中的变量值,它将被渲染,就这么简单。

【讨论】:

    【解决方案2】:

    在服务器端渲染应用程序的上下文中,将 .env 文件与 nodeJS 一起使用有多安全?可以以某种方式访问​​文件吗?

    不,它无法访问,除非您有意将其托管在网络服务器上。

    在前端注入这些变量有多安全?我目前正在通过修改这样的插件来做到这一点:

    “安全”在这里是错误的词。 javascript 包可能已缩小和混淆,但来自process.env 的值对您的用户可见,因为您将此文件发送到他们的浏览器。所以你必须决定它是否包含敏感信息。你可能不想拥有全部的process.env 在包中,只有与您的应用程序相关的键/值对。

    【讨论】:

      猜你喜欢
      • 2013-01-18
      • 2022-09-25
      • 2012-05-20
      • 2021-08-11
      • 1970-01-01
      • 2022-10-20
      • 2013-12-10
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多