繁体   English   中英

Firebase 防止实时数据库恶意更新

[英]Firebase prevent malicious update in real-time database

我正在尝试使用 firebase 实时数据库开发一个实时匿名队列。 这个概念是当一个人访问我的网页时,它会生成一个 UUID 并在 firebase DB 插入一条记录。 根据 UUID 的 position,我将确定该用户在队列中的 position。 以下是文件样本:-

{
    _random_key_1: {
        uuid: '47c044c7-da32-4e37-a416-cb2d621e0e39',
        is_finished: false
    },
    _random_key_2: {
        uuid: 'bcb8e01f-7745-43aa-9897-fd217d755769',
        is_finished: false
    },
    _random_key_3: {
        uuid: 'cdf754bd-4626-4da1-b676-9ebe87927a04',
        is_finished: false
    },
}

在这里,队列ID cdf754bd-4626-4da1-b676-9ebe87927a04的用户的position是3。当队列前面的人完成他的事情时,我将用is_finished更新他的队列is_finished: true并重新计算其他人的position连接到这个数据库。

例如,假设第一个用户 ( 47c044c7-da32-4e37-a416-cb2d621e0e39 ) 完成了他的事情。 以下是文档的外观

{
    _random_key_1: {
        uuid: '47c044c7-da32-4e37-a416-cb2d621e0e39',
        is_finished: true
    },
    _random_key_2: {
        uuid: 'bcb8e01f-7745-43aa-9897-fd217d755769',
        is_finished: false
    },
    _random_key_3: {
        uuid: 'cdf754bd-4626-4da1-b676-9ebe87927a04',
        is_finished: false
    },
}

现在,队列ID cdf754bd-4626-4da1-b676-9ebe87927a04的用户的position是二,因为他面前只有一个人有未完成的任务。

问题是因为我所有这些都来自前端(因为我预计应用程序负载很重并且不打算让我的后端服务器超载),任何人都可以窃取我的 firebase 凭据并恶意设置is_finished = true给前面的每个人他。

我该如何防止这种情况发生?

您可以使用 Firebase 的服务器端安全规则来控制用户可以写入的内容。 由于这些是在服务器上强制执行的,因此用户无法从客户端代码中绕过它们。

例如,如果用户只能添加is_finished设置为 false 的项目,则可以使用验证规则来强制执行。 这确实需要您可以区分普通用户和处理队列项目的用户,因此通常意味着您要么想要使用Firebase 身份验证来识别它们 - 或者在受信任的环境中使用 Firebase 的管理员 SDK 之一运行处理代码(例如您的开发机器、您控制的服务器或 Renaud 提到的 Cloud Functions/Cloud Run)。

还可以考虑使用Firebase App Check ,这使得恶意用户更难使用您的配置密钥运行他们自己的代码。 虽然这有助于防止滥用,但并不能保证杜绝所有恶意使用,因此您仍应采用上述方法。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM