Firebase云功能:如何处理连续请求

Lạn*_*àng 22 firebase google-cloud-functions

在使用Firebase(在这种情况下使用Firebase云功能)时,我们必须为每个带宽字节付费.

所以,我想知道我们如何才能处理某个人以某种方式找到我们的端点然后故意(通过脚本或工具)连续请求的情况?

我在互联网上做了一些搜索,但没有看到任何可以帮助.除了这个,但没有真正有用.

joh*_*bay 11

由于您没有指定哪种类型的请求,我将假设您的意思是firebase云功能上的http(s)-triggers.

您可以使用多个限制器来"减少"请求所消耗的带宽.我会写一些我想到的东西

1)限制请求的类型

如果您需要的只是GET并且说例如您不需要,那么PUT您可以在进行云功能之前返回403.

if (req.method === 'PUT') { res.status(403).send('Forbidden!'); }
Run Code Online (Sandbox Code Playgroud)

2)如果可以,请进行身份验证

在此处按照Google的示例,仅允许授权用户使用您的https端点.你可以简单地通过验证令牌做到这一点这样的SOF回答这个问题.

3)检查原产地

您可以尝试在云功能中进一步检查请求的来源.如果我没记错的话,云功能可让您完全访问HTTP请求/响应对象,这样您就可以设置相应的CORS标头并响应飞行前的OPTIONS请求.

实验理念1

您可以假设将您的功能置于负载均衡器/防火墙之后,并中继触发它们.它或多或少会破坏云功能可扩展性的目的,但如果一种形式的DoS比扩展性更重要,那么您可以尝试创建一个应用引擎中继,将其置于负载均衡器/防火墙后面并处理该层的安全性.

实验理念2

您可以通过在其间放置类似cloudflare的内容来尝试使用DNS级别攻击防范解决方案来解决您的问题.使用CNAME和Cloudflare页面规则将URL映射到您的云功能.这可能会假设吸收这种影响.像这样 :

*function1.mydomain.com/* - > https://us-central1-etc-etc-etc.cloudfunctions.net/function1/$2

现在,如果你去

http://function1.mydomain.com/?something=awesome

你甚至可以将URL参数传递给你的函数.在夏天我需要类似的东西时,我在这篇中篇文章中读过的一个策略.

最后

在试图做出SOF问题更多的联系,并帮助大家找到答案,这里是另外一个问题,我发现这是性质相似.链接在这里,以便其他人也可以找到它.


Fla*_*jta 8

在不受支持的方法上返回 403 或空正文对您没有多大帮助。是的,您浪费的带宽会更少,但 Firebase 仍会为您的请求收费,攻击者可能只发送数百万个请求,您仍然会赔钱。

此外,身份验证也不能解决此问题。首先,任何身份验证过程(创建令牌、验证/验证令牌)都是昂贵的,Firebase 再次考虑到了这一点,并将根据函数返回响应所需的时间向您收费。您不能使用 auth 来防止连续请求。

另外,一个聪明的攻击者不会只是去寻找一个返回 403 的请求。是什么阻止了攻击者数百万次访问登录端点?如果他提供了正确的凭据(如果他很聪明他会这样做),您每次返回令牌都会浪费带宽,而且如果您重新生成令牌,您将在每个请求上浪费时间,这会进一步损害您的账单。

这里的想法是完全阻止这个攻击者(在进入你的 api 函数之前)。我要做的是使用 cloudflare 来代理我的端点,在我的 api 中,我将定义一个 max_req_limit_per_ip 和一个 time_frame,将每个请求 ip 保存在 db 上,并在每个 req 检查 ip 是否确实超过了给定时间范围的限制,如果是这样,您只需使用 cloudflare api 在防火墙处阻止该 ip。

提示: max_req_limit_per_ip 和 time_frame 可以针对不同的请求进行自定义。

例如:

  1. 一个ip可以在1小时内打403 10次
  2. 一个ip可以在20分钟内5次登录成功
  3. 一个ip可以在1小时内5次登录失败

  • “我要做的是使用 cloudflare 来代理我的端点”你怎么能这样做...... (5认同)

归档时间:

查看次数:

2295 次

最近记录:

6 年,1 月 前