当前位置: 首页 > 知识库问答 >
问题:

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

晋涛
2023-03-14

我试图构建一个仅当源URL位于allowlist上时才执行逻辑的应用程序。我正在尝试使用以下方法获取Firebase函数内部的源URL:

我试图从这个堆栈溢出帖子中使用这些:

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

所有返回未定义。

我试图从堆栈溢出帖子中整合此函数:

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

返回我的云函数的基本url

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

我真正想看到的是发布文章的url。我用这个来写这篇文章,所以我希望看到:

 https://reqbin.com

共有2个答案

汪坚
2023-03-14

也许你试图找到如何阻止其他网站发送的请求,而不是你自己的网站。

您可以使用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',
  ],
});
刘奇
2023-03-14

代码很好。与浏览器不同,浏览器会根据使用的策略自动生成此标头,您需要在reqbin(或任何API工具,如Postman)上设置referer标头,例如:

Referrer :  https://reqbin.com 

然而,使用此标头存在安全问题,因为它很容易操作。你应该知道这一点。

保护Firebase功能的更好解决方案是使用Firebase身份验证。这里有一个注意事项:

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

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

Firebase团队提供了示例代码,说明如何限制仅来自通过Firebase身份验证的用户的请求。您还可以要求客户机发送一个授权其使用函数的密钥。

附加参考:

  • 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
 类似资料:
  • 我的Firebase函数https请求有问题。 此外,当我在后端时,它只显示..一个空的物体。 有什么想法为什么似乎不起作用吗?我也使用和来实现,但它们都返回到故障安全。

  • 我想创建一个API,为了验证API使用者,我将提供一个API密钥、应用id和应用机密。问题是,我想知道http请求来自哪里,这样我就可以知道发出que请求的主机是否是注册主机。例如:www.someone。com的应用程序id为0001,应用程序机密为1200,api密钥为458。如果此凭据用于发出请求,我想知道请求者是否真的是www.someone。通用域名格式

  • 如果您在Firefox WebExtension中发出获取请求,它将自动设置“origin”标题。例如,当我在WebExtensions中运行此代码时。。。 ... 结果请求包含标题:“origin:moz”-extension://539a0d5b-60d9-4726-b3de-27d6979edc26" 在Chromium中运行相同的代码不会设置标头。(更新:这并不总是正确的,因为Chrome

  • 问题内容: 在w3schools.com(url)上,有一个如何使用纯Javascript进行AJAX调用的示例。如果看一下示例,您将看到呼叫是由一个按钮触发的: 这是功能: 我想做的是获取传出的AJAX调用的URL,即ajax_info.txt(URL): 我试图将URL置于警报中,所以我尝试使用希望给我的响应来调用响应的标头: 它确实给了我所有标头,但没有给主机。因此,我的下一个步骤是尝试设置

  • 问题内容: 我正在尝试让我的函数返回http get请求,但是,无论如何,它似乎在?scope中丢失了。我对Node.js不熟悉,因此不胜感激 问题答案: 当然,您的日志会返回:您在完成请求之前先进行日志。问题不是范围,而是 异步性 。 是异步的,这就是为什么它将回调作为参数的原因。做您在回调中要做的事情(传递给的):

  • 原理 对于POST请求的处理,koa2没有封装获取参数的方法,需要通过解析上下文context中的原生node.js请求对象req,将POST表单数据解析成query string(例如:a=1&b=2&c=3),再将query string 解析成JSON格式(例如:{"a":"1", "b":"2", "c":"3"}) 注意:ctx.request是context经过封装的请求对象,ctx.