如何防止机器人在Web应用程序上增加Firebase账单?

4
我正在学习网站开发,并使用Firebase作为后端。我计划通过以下方式防止机器人进行暴力攻击,从而导致我的Firestore账单增加:
1. 使用安全规则,只允许已登录的用户向数据库写入。
2. 使用Firestore和安全规则,每个用户每秒只允许一定数量的写入操作。如果用户超过此数量,则会被禁止一段时间。
这两个安全措施能否有效防止大部分机器人攻击呢?
此外,我看到托管的价格是每传输1GB数据收费0.15美元。
我的整个Web应用程序只有约5MB的数据,但这意味着如果我的Web应用程序被加载1,000次,那么它将花费我5MB * 1,000 = 5GB * $0.15 = $0.75,这我可以承受。但假设有人让机器人重新加载页面1,000,000次,那么它将花费我5MB * 1,000,000 = 5,000 GB * $0.15 = $750。显然,$750是一笔很大的开支,我无法承担。
我该如何防止机器人多次重新加载我的页面并增加我的托管费用呢?我不能使用上面列出的策略,因为我希望没有账户的用户仍然能够查看我的网站。

你能否解释一下为什么每次都要加载5MB的数据?如果你需要重复提供同样的数据,可以查看Firestore bundle - Dharmaraj
主要是因为我不知道你可以把它分开,哈哈?我只有一个index.js文件,因为我正在使用React,它大约有5 MB的数据。你怎么分割它呢? - Trev347
你的问题是关于什么的?Firestore还是Firebase托管的网站?那么什么是"split"呢?用户是否应该访问Firestore上的全部数据? - Dharmaraj
更重要的是,有没有办法阻止它们加载它?即使我可以减少它,但如果机器人发出1M个请求,仍然不会有太大的区别。 - Trev347
我的主要问题是如何阻止机器人反复加载您的网站?因为它们加载的次数越多,我就会被 Firebase 托管收取更多费用。 - Trev347
1个回答

3

首先,需要澄清一些问题...

  1. 超过每月免费使用的10GB后,FB托管的费用为每GB 0.15美元。

  2. 你的整个应用程序可能只有5MB,但除非你遗漏了构建步骤,否则传输数据量很可能不是这么多。在React应用中,资源仅在需要时加载。 Firebase进一步压缩响应以节省带宽。

  3. 资产通常会被缓存并且不会在后续页面查看中重新加载。对于机器人来说,情况要复杂一些,但这有助于总体降低数据传输速率。

现在回到你的问题...

减少重复访问页面的方式主要通过速率限制来处理。这限制了在给定时间内向您的站点发出的请求次数。

实施Google Analytics还可以帮助检测机器人流量,报告异常活动突发。

您还可以使用CAPTCHA来减少机器人尝试登录或提交其他表单数据的次数。

双因素身份验证是防止暴力攻击的另一个好工具。

最后,我建议为您的项目创建预算警报。这很容易做到且高度可定制。您甚至可以将其设置为1美元。它不会自动停止您的项目,只会向您发送电子邮件。但是如果快速处理,它将为您避免更大的账单。


谢谢你的帮助!但你有没有任何减轻频繁页面访问的建议,比如速率限制?我知道如果用户已登录,你可以使用Firestore来计算每次用户访问页面的次数,但既然用户第一次访问该页面时不会登录,那么该怎么跟踪呢? - Trev347
速率限制是在服务器级别处理的。Firebase很可能已经默认设置了这个功能,因为任何好的服务器都应该有这个功能。尽管他们的文档不太清楚。如果您仍然担心成为攻击目标,您可以运行一些中间件作为Firebase函数express-rate-limit。速率限制包会为您完成工作。您还可以深入研究Google Cloud安全文档,因为所有FB项目都只是Google Cloud项目。Cloud Armor有特定的速率限制解决方案。 - Tim

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接