【问题标题】:Firebase functions: Securing firebase https functionsFirebase 功能:保护 firebase https 功能
【发布时间】:2018-05-13 09:55:33
【问题描述】:

如何保护使用 Firebase 函数实现的 HTTPS 调用?如果黑客知道该网址,他可以轻松调用它。是否有任何系统,如 api 密钥、应用程序机密来确保安全?需要考虑哪些风险?

【问题讨论】:

  • 嘿,您找到解决方案了吗?看同样的东西
  • 是的,但它还没有实现(否则我会发布代码)。我的想法只是在 index.js 中“硬编码”一个 api 键并为每个请求手动检查它(当然使用承诺)。不应该做太多的工作......
  • 有人可以直接在您的代码中看到 api 密钥并自己使用它来发出请求吗?
  • 是的,总是使用 api 密钥(/app 机密)。但想法是,当这种情况发生时,您可以使密钥无效,而其他密钥(可能有多个)仍将继续工作。
  • 是什么让您知道何时使密钥无效?

标签: firebase google-cloud-functions


【解决方案1】:

根据您的 cmets 更新。

如果您需要将您的 Cloud Functions 访问权限限制为经过身份验证的用户:

在 GitHub 上的官方 Cloud Function 示例集中有一个示例“展示了如何将 HTTPS 功能限制为仅限应用的 Firebase 用户”。这是链接:https://github.com/firebase/functions-samples/tree/master/authorized-https-endpoint

此外,Firebase 最近发布了新的 HTTPS Callable 函数,这些函数“与其他 HTTP 函数类似,具有 [一些] 附加功能,... [包括] ... Firebase 身份验证。这是文档的链接:https://firebase.google.com/docs/functions/callable


如果您只想“基于 api 密钥或秘密(在应用程序中硬编码)”“保护”您的 Cloud Functions,因为它们“应该在没有任何用户登录的情况下被调用”:

由于您可以访问 Cloud Function 中的 HTTPS request 对象,因此您可以将任何“秘密值”或“api 密钥”添加到标题(或在 POST 的情况下添加到正文)并在功能。但是,如果您需要撤销机制,则由您来实现它。


最后,我建议您阅读 Firebase 团队的 Doug Stevenson 最近的回答:How do you made Google Cloud Functions only worked when pinged from certain URLS?

【讨论】:

  • 好的,但这并不适用于我。我确实有应该在没有任何用户登录的情况下调用的函数(甚至不是匿名的)。所以我想根据 api 密钥或秘密(在应用程序中硬编码?)来限制它。没有?
  • 为什么不向每个可调用对象添加一个 appkey/secret 作为参数并在云函数代码中手动检查呢?如果它被黑了,这些至少可以被撤销吗?
  • 您确实可以这样做(因为您可以访问函数中的request 对象)。但是,就安全性而言,这种机制是否足够由您决定。正如 Doug 在他的回答中所说,我想补充一点,如果符合您的需求,CORS 也是一种可能性。
  • 在 Firestore 中保存密钥并使用请求数据确认 api 密钥存在似乎是不错的方式。但是实现 API 网关会更好吗?
猜你喜欢
  • 2020-05-30
  • 2019-03-01
  • 2023-03-29
  • 2020-06-09
  • 1970-01-01
  • 2019-05-23
  • 2021-11-30
  • 1970-01-01
相关资源
最近更新 更多