【发布时间】:2020-04-26 01:32:17
【问题描述】:
我在我的云功能中看到一些非常不寻常的流量,我只能将它们归因于攻击(请注意,我使用的是免费的 Spark 计划)。
收到垃圾邮件的云函数是:
exports.onPlayerSolvedPuzzle = functions.database.ref('/U/{userId}/CP/{puzzleId}/S')
.onCreate((snapshot, context) =>
{
...
如您所见,它被设计为在我的数据库中添加新数据时调用,路径为 /U/{userId}/CP/{puzzleId}/S
我的数据库规则指定只有经过身份验证的用户才能使用他的 ID 写入数据,另外我检查该数据条目是否不存在
{
"rules":
{
"U":
{
"$user_id":
{
".read" : false,
".write": "auth.uid != null && $user_id === auth.uid",
"CP":
{
"$puzzle_id":
{
"S":
{
".validate": "!data.exists()"
},
...
最后,我只启用了“Play Games”和“Game Center”身份验证,因此不能使用匿名帐户或电子邮件/密码帐户来修改我的数据库。
当攻击发生时,我的数据库的最大同时连接数从平均 20 个跃升至 100 个,云函数调用数从每天 1000 个或更少跃升至每天 20000 个或更多,耗尽了我的每月使用量配额不少。
我应该如何保护我尚未完成的云函数调用?
P.S.:当 'onPlayerSolvedPuzzle' 执行时,它会写入数据库的另一部分,以增加使用此 'puzzle_id' 解决难题的人数(如果没有,则创建一个条目)。我有代码来查看数据库的那部分中是否有与不应该存在的“puzzle_id”相关的条目(我知道所有谜题的puzzle_id)。当我运行这段代码时,我根本看不到任何问题,所以我相信该函数不是在路径中使用随机的 puzzle_id 调用的。
【问题讨论】:
标签: firebase-realtime-database google-cloud-functions