![](/img/trans.png)
[英]How to save DropdownButtonFormField value to Firebase real-time database?
[英]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.