如何限制 Firebase Cloud Function 只接受来自 Firebase Hosting 网站的请求
How to restrict Firebase Cloud Function to accept requests only from Firebase Hosting website
我在 Firebase Cloud Functions 上托管了一个 Node.js API(使用 Express.js 构建),并在 Firebase Hosting 应该与上述 API.
交互
我想限制对 API 的调用,以便只有 Web 应用程序能够调用云函数。我怎样才能做到这一点?
我尝试过的:
使用 App Check 或更准确地说 Google 的网络应用 reCAPTCHA v3。我已将 Web 应用程序的域列入白名单,并已激活 App Check 令牌验证服务器端。但是,App Check 的问题是我能够从浏览器获取 reCAPTCHA 证明令牌(在通过 Web 应用程序进行身份验证后)并将其用于从任何地方发出的请求。这使得从 Web 应用程序外部轰炸 API 并首先破坏了使用 App Check 的目的。
这里要注意一点,documentation for activating App Check in Cloud Functions instructs the usage of functions.https.onCall()
. However, since my API is built using Express.js, I had to use a workaround to be able to use functions.https.onRequest()
as instructed here。
限制来自 Google 云控制台的云功能,只允许同一项目的客户端按照指示调用该功能 here。不幸的是,我在 Firebase Hosting 上托管的 Web 应用程序似乎不属于同一个 Google Cloud 项目。在 Firebase Hosting 上托管的应用不会出现在 Google 云控制台中。此外,在将函数的 入口设置 调整为“ 仅允许内部流量 ” 后,我在尝试访问 API 通过网络应用程序。不过,我无法从其他任何地方访问 API,这在一定程度上是期望的结果。
在任何人提议从 API 中限制 CORS 选项中的域之前,虽然这可能用于限制对 API 端点的访问,但它仍然允许快速调用该函数并且因此,可能会增加账单。
非常感谢任何建议!
这里是 Firebaser。
这是一个很好的问题! Doug 已经在上面提出了一些重要的观点,我将补充一点,App Check 令牌上的 TTL 减少了您在第一次观察到的 replay window要点,这个 TTL 是 configurable.
reCAPTCHA v3 的默认 TTL 为 1 天以防止 运行 超出配额,但您可以设置更短的 TTL 以增加攻击者尝试设置重播攻击的成本。但是请注意文档中描述的相关权衡。您可以阅读相关配额和限制 here.
遗憾的是,从 Firebase 托管重定向的 Web 应用程序无法连接到 GCP 内部网络。在这种情况下,App Check 实际上正是您要寻找的。
最后,由于我们一直致力于改进 App Check 平台,您在此处留下的评论对我们很有价值,因为我们会决定接下来要开发哪些反滥用功能。
我在 Firebase Cloud Functions 上托管了一个 Node.js API(使用 Express.js 构建),并在 Firebase Hosting 应该与上述 API.
交互我想限制对 API 的调用,以便只有 Web 应用程序能够调用云函数。我怎样才能做到这一点?
我尝试过的:
使用 App Check 或更准确地说 Google 的网络应用 reCAPTCHA v3。我已将 Web 应用程序的域列入白名单,并已激活 App Check 令牌验证服务器端。但是,App Check 的问题是我能够从浏览器获取 reCAPTCHA 证明令牌(在通过 Web 应用程序进行身份验证后)并将其用于从任何地方发出的请求。这使得从 Web 应用程序外部轰炸 API 并首先破坏了使用 App Check 的目的。
这里要注意一点,documentation for activating App Check in Cloud Functions instructs the usage of
functions.https.onCall()
. However, since my API is built using Express.js, I had to use a workaround to be able to usefunctions.https.onRequest()
as instructed here。限制来自 Google 云控制台的云功能,只允许同一项目的客户端按照指示调用该功能 here。不幸的是,我在 Firebase Hosting 上托管的 Web 应用程序似乎不属于同一个 Google Cloud 项目。在 Firebase Hosting 上托管的应用不会出现在 Google 云控制台中。此外,在将函数的 入口设置 调整为“ 仅允许内部流量 ” 后,我在尝试访问 API 通过网络应用程序。不过,我无法从其他任何地方访问 API,这在一定程度上是期望的结果。
在任何人提议从 API 中限制 CORS 选项中的域之前,虽然这可能用于限制对 API 端点的访问,但它仍然允许快速调用该函数并且因此,可能会增加账单。
非常感谢任何建议!
这里是 Firebaser。
这是一个很好的问题! Doug 已经在上面提出了一些重要的观点,我将补充一点,App Check 令牌上的 TTL 减少了您在第一次观察到的 replay window要点,这个 TTL 是 configurable.
reCAPTCHA v3 的默认 TTL 为 1 天以防止 运行 超出配额,但您可以设置更短的 TTL 以增加攻击者尝试设置重播攻击的成本。但是请注意文档中描述的相关权衡。您可以阅读相关配额和限制 here.
遗憾的是,从 Firebase 托管重定向的 Web 应用程序无法连接到 GCP 内部网络。在这种情况下,App Check 实际上正是您要寻找的。
最后,由于我们一直致力于改进 App Check 平台,您在此处留下的评论对我们很有价值,因为我们会决定接下来要开发哪些反滥用功能。