当前位置: 首页 > 面试题库 >

正确隐藏数据库凭证

羊舌高峰
2023-03-14
问题内容

如您所见,我有我的数据库连接文件和另一个“受保护的”文件,我的凭据在其中,并且此文件包含在.gitignore中。我导入它并到达数据。很基本。因此,我的问题是:

  1. 这是正确的方法吗?
  2. 如果没有,我该怎么办?另外:如何为帐户和连接增加额外的安全性?
  3. 假设我有一个私人收藏,没人可以看到,我该如何特别保护这个收藏?我的意思是说,用密码或两步验证。

当前代码:

const mongoose = require("mongoose");
const mongoCredentials = require("../protected/mongoCredential");

const URI = `mongodb+srv://${mongoCredentials.username}:${mongoCredential.password}
              @firstcluster-eldi8.mongodb.net/culturapp?retryWrites=true&w=majority`;

mongoose.connect(URI, { useUnifiedTopology: true, useNewUrlParser: true })
  .then(db => console.log("MongoDB is connected"))
  .catch(err => console.log(">> ERROR: ",err));

module.exports = mongoose;

问题答案:

…我有我的数据库连接文件和另一个“受保护的”文件,其中包含我的凭据,并且此文件包含在.gitignore中。我导入它并到达数据。

正确的方法是使用环境变量。

使用环境变量

环境变量是在 环境 (即您的本地开发机器或远程生产服务器)上设置的。然后,在您的应用程序中,读取环境变量并适当地使用它们。

通常有(至少)几个原因,例如:

  • 凭据不存在于查看存储库内容的人可以读取的文件中。克隆存储库的人不需要知道 您的 数据库凭据。
  • 凭据在环境之间可能有所不同。您可能会在本地开发计算机上使用其他数据库,而在远程生产服务器上使用其他数据库。

设置环境变量的方法如下(这在Linux中,其他OS可能有所不同):

$ export MONGO_DB_USERNAME=foo
$ export MONGO_DB_PASSWORD=bar

以下是在Node.js中阅读它们的方式:

console.log(process.env.MONGO_DB_USERNAME) // logs 'foo'
console.log(process.env.MONGO_DB_PASSWORD) // logs 'bar'

或在启动时将变量传递给流程

另外,您可以在启动过程时传递变量,如下所示:

$ MONGO_DB_USERNAME=foo MONGO_DB_PASSWORD=bar node app.js

但是,通常不建议这样做,因为您很可能要通过npm start
script
启动进程。因为package.json,这里的npm start命令定义,始终致力于资源库,就违背了隐藏凭证的全部目的。



 类似资料:
  • 我有一个非常简单的窗口,它包含一个按钮:。 在main函数中,我设置了我的并且在按钮监听器中,我想关闭窗口,所以我将可见性设置为false:之后,我执行以防止在多次运行程序时可能出现的内存泄漏。 我有两个问题: 在上述情况下,我真的需要吗? 如果我有这个作为

  • 我有一个用户名和密码在我的Java应用程序调用外部API。我想模糊这些凭据的字符串,而不是硬编码在源代码中的纯文本。 有什么建议吗?

  • 嗨,我有一个用于OAuth2的spring配置xml文件。我对它进行了这样的配置,即需要参数和效果curl来请求令牌。它会发出以下请求: curl-x post-v http://localhost:8080/oauth/token-d“grant_type=password&client_id=test&client_secret=test&username=user1&password=pas

  • 我浏览了很多帖子,但没有抓住要点。 我们能不能说:抽象=封装数据隐藏 或者不止这些!! 谢谢

  • 我对Vertx相当陌生,正在尝试寻找一些实际的数据库使用示例。 我有一个创建共享数据库对象的Verticle(和许多处理路由的类),但我想在主类之外使用共享数据库,显然我可以在其他类构造函数中传递数据库对象,但我相信Vertx有更好的方法来实现这一点。 有没有人有任何Java Vertx示例,其中包含真实的数据库实现? 提前谢谢你。

  • 本文向大家介绍两种iOS隐藏导航栏的正确方法,包括了两种iOS隐藏导航栏的正确方法的使用技巧和注意事项,需要的朋友参考一下 简介 在项目中经常碰到首页顶部是无限轮播,需要靠最上面显示.有的设置导航栏为透明等一系列的方法,这个可以借助第三方.或者干脆简单粗暴的直接隐藏掉导航栏.可是push到下一个页面的时候是需要导航栏的,如何做了,这里给出两种方法. 第一种做法 -注意这里一定要用动画的方式隐藏导航