在JavaScript中保护Firebase Secret

时间:2019-03-21 09:32:41

标签: javascript firebase

我已经使用纯JavaScript创建了简单的Firebase聊天系统,一切正常,但是我在javascript中向所有人开放了以下代码。

  var config = {
    apiKey: "AIzaSyD0Bm91234567678srKwjUGrpu35dgIIE",
    authDomain: "example-26847.firebaseapp.com",
    databaseURL: "https://example-26847.firebaseio.com",
    projectId: "example-26847",
    storageBucket: "example-26847.appspot.com",
    messagingSenderId: "937123954572"
  };

但是我觉得这很容易受到黑客攻击,如何保护它,我只有php Web服务器。

2 个答案:

答案 0 :(得分:1)

您没有太多选择。

通过JS访问

您实际上在基于JavaScript的应用中需要这些键,因此它们会以一种或另一种方式使用。我认为这样做不会带来太大的风险,您仍然可以添加一些规则,以仅允许基于将生成的apikey /令牌对firestore进行读/写访问。
另一个解决方案是通过ajax / XHR请求从您的服务器获取这些ID,并将其本地存储在一些基于私​​有浏览器的存储中。

VCS

在不提交给VCS的情况下将这些ID保留在本地很容易(例如,使用.example使用.gitignore)

此外,您不需要所有它们,storageBucket仅用于在GCP存储中存储文件,messagingSenderId用于推送通知。

答案 1 :(得分:0)

好吧,简单的答案是将API密钥简单地存储在PHP服务器上的环境变量中。您可以使用$ _SERVER和$ _ENV数组访问这些变量。

参考:http://php.net/manual/en/reserved.variables.environment.php

如果您无权访问php.ini文件,请使用php.ini文件并将API密钥变量添加到php.ini文件中,或使用user.ini文件。

除了存储API密钥外,还有风险,尤其是当您将代码存储在Github或类似的代码存储库中时。

参考:http://php.net/manual/en/configuration.file.per-user.php

参考:http://php.net/manual/en/configuration.file.php

您可以使用getenv()检索API密钥变量。 参考:GetEnv

您可以更进一步,并通过google firebase控制台将此API密钥的使用限制为您的域名。