向公众公开每一个关键的Firebase安全吗?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (19)

应该在HTML中添加给定的每个键来初始化Firebase:

// TODO: Replace with your project's customized code snippet
<script src="https://www.gstatic.com/firebasejs/3.0.2/firebase.js"></script>
<script>
  // Initialize Firebase
  var config = {
    apiKey: '<your-api-key>',
    authDomain: '<your-auth-domain>',
    databaseURL: '<your-database-url>',
    storageBucket: '<your-storage-bucket>'
  };
  firebase.initializeApp(config);
</script>

通过这样做,每个访问者都会接触到每个用户,它是否真正意味着公开?

提问于
用户回答回答于

apKey本质上只是标识Google服务器上的Firebase项目。这并不是一个安全风险的人知道这一点。事实上,他们必须知道这一点,这样他们才能与你的Firebase项目进行交互。

从这个意义上说,它非常类似于Firebase历史上用于标识后端的数据库URL,请参阅为什么这不是安全风险的问题,包括使用Firebase的服务器端安全规则,以确保只有经授权的用户才能访问后端服务。

用户回答回答于

我把这个解决方案放在一起,这并不能防止刮擦,但会使您更难使用API密钥。

警告:要获取数据,即使使用这种方法,也可以打开Chrome中的JS控制台,然后键入:

firebase.database().ref("/get/all/the/data").once("value", function (data) {
    console.log(data.val());
});

只有数据库安全规则才能保护数据。

尽管如此,我还是将生产API密钥的使用限制在我的域名上,如下所示:

  1. 选择Firebase项目
  2. 全权证书
  3. 在API键下,选择浏览器密钥。它应该是这样的:“浏览器键(由Google服务自动创建)
  4. 在“接受这些HTTP引用者(网站)的请求“,添加应用程序的URL

现在,应用程序将只在这个域名上工作。因此,我创建了另一个API密钥,用于本地主机的开发。

  1. 单击Create凭据>api键

这个是不受限制的,所以你一定要保密。

我使用Webpack来构建我的生产应用程序。为了确保我不会错误地发布这个新的无限制api密钥,我把它放在index.html就像通常对API密钥所做的那样。然后,在我的webpack.production.config.js文件,我每次更换钥匙index.html复制到生产生成中,如下所示

plugins: [
    new CopyWebpackPlugin([
      {
        transform: function(content, path) {
          return content.toString().replace("###dev-key###", "###public-key###");
        },
        from: './index.html'
      }
    ])
  ]

默认情况下,正如Emmanuel Campos所说。

扫码关注云+社区