如何获取 Firebase 函数请求的原始 URL?

Posted

技术标签:

【中文标题】如何获取 Firebase 函数请求的原始 URL?【英文标题】:How do I get the origin URL of a Firebase Function request? 【发布时间】:2021-05-02 17:13:51 【问题描述】:

我正在尝试构建一个仅在源 URL 位于允许列表中时才执行逻辑的应用程序。我正在尝试使用以下方法在 Firebase 函数中获取原始 URL:

我尝试使用来自this stack overflow post的这些:

req.get('Referrer')
req.get('Referer')
req.headers.referer
req.headers.referrer

全部返回未定义。

我试图把this stack overflow post的这个函数放在一起:

function getOriginUrl(req: any) 
    return req.protocol + '://' + req.get('host') + req.originalUrl

这将返回我的云函数的基本 url

https://us-central1-secured-1q4fq.cloudfunctions.net/

我真正想看到的是发布帖子的网址。我正在使用this 发帖,所以我希望看到:

 https://reqbin.com

【问题讨论】:

您是否要阻止检索到您的函数的其他 url 请求??? 【参考方案1】:

代码很好。不像浏览器会根据他们使用的 policy 自动生成此标头,您需要在 reqbin(或 Postman 等任何 API 工具)上设置 Referrer 标头:

Referrer :  https://reqbin.com 

但是,使用此标头存在安全问题,因为它可以是easily manipulated。你应该知道这一点。

保护您的 Firebase 函数的更好解决方案是使用 Firebase 身份验证。这是一个注释:

HTTP 请求并非“来自域名”。 HTTP 请求似乎来自其流量通过全球网络路由的 IP 地址。您可以尝试将执行限制为某些源 IP,但不能保证这些 IP 地址可以识别请求的真实来源。

如果您想保护您的函数不被执行,最好要求一些其他类型的安全措施来识别请求的发起者。

Firebase 团队提供sample code that shows how to limit requests from only users authenticated with Firebase Authentication。也可以要求客户send a key that authorizes its use of a function。

其他参考资料:

https://www.quora.com/What-are-the-solutions-to-make-my-Firebase-cloud-functions-private-so-that-only-requests-sent-from-a-specific-domain-name-will-be-processed-1/answer/Doug-Stevenson-1 https://***.com/a/45034407/7031308

【讨论】:

【参考方案2】:

也许您试图找到如何阻止除您自己的网站以外的其他网站发送的请求。

你可以只使用 NPM 库CORS。

例如,您的函数希望只允许 localhost 发送的请求。

import * as cors from 'cors';
const corsHandler = cors(
  origin: [
    'http://localhost:4200',
    'http://127.0.0.1:4200',
    'http://localhost:5000',
    'http://127.0.0.1:5000',
  ],
);

【讨论】:

以上是关于如何获取 Firebase 函数请求的原始 URL?的主要内容,如果未能解决你的问题,请参考以下文章