javascript - 火力基地。授予客户端直接写入服务器上数据库的访问权限是否安全?

标签 javascript security firebase-realtime-database

我正在探索 Google Firebase。从文档中我看到他们授予客户端访问权限以直接更改服务器上的数据库...这安全吗?

private void WriteNewScore(string userId, int score)
{
    // Create new entry at /user-scores/$userid/$scoreid and at /leaderboard/$scoreid simultaneously
    string key = mDatabase.Child("scores").Push().Key;
    LeaderBoardEntry entry = new LeaderBoardEntry(userId, score);
    Dictionary<string, Object> entryValues = entry.ToDictionary();

    Dictionary<string, Object> childUpdates = new Dictionary<string, Object>();
    childUpdates["/scores/" + key] = entryValues;
    childUpdates["/user-scores/" + userId + "/" + key] = entryValues;

    mDatabase.UpdateChildrenAsync(childUpdates);
}

如果客户端可以被“模拟”或被黑客攻击等怎么办。是否应该使用带有 REST 接口(interface)的 AppEngine,它实现服务器端安全逻辑来更改数据库或直接使用数据库是正确且安全的方法?或者是否有任何特定的解决方案可以保证 Firebase 中数据库的安全?谢谢。

文档页面:https://firebase.google.com/docs/database/unity/save-data

最佳答案

有一个security rules language for the Firebase Database ,它允许您描述数据的验证和访问规则。制定正确的规则后,这可以与您自己编写的任何服务器端代码一样安全。

例如,对于您共享的代码片段,您需要:

  • 验证所写分数的格式是否正确,并且是否在预期范围内。
  • 验证 /scores/$key/user-scores/$uid/$key 是否具有相同的值。
  • 确保用户只能在自己的 $uid 下进行写入。

Firebase documentation 中涵盖了此类规则和更多规则。并在 many previous question on the topic .

您可以在这些安全规则中做非常高级的事情。例如,我见过有人验证国际象棋的走法,而其他人则在这些规则中构建了安全的玩家间买卖系统。

但是编写此类规则的容忍度因开发人员而异。许多开发人员更习惯在命令式代码中执行此类(验证和访问)逻辑,在这种情况下使用自定义服务器端代码也很好。如果这是您的偏好,我建议您查看Cloud Functions for Firebase ,这使得这一切变得简单,并且与许多 Firebase 产品(例如实时数据库)完美集成。

关于javascript - 火力基地。授予客户端直接写入服务器上数据库的访问权限是否安全?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48592271/

相关文章:

javascript - 将屏幕上的 div 定位为特定形状

javascript - 动态组件查找导致 Next.js 包大小爆炸,如何解决?

javascript - jQuery类发生变化时,如何给元素的css属性添加动画?

javascript - 通过 HTTPS 在 AJAX 调用中返回 HTML 内容的风险

python - 官方 Python GPG 签名 key - 它在哪里? -GPG : using RSA key FC624643487034E5

android - 在将附加节点传递给 Firebase 数据库之前将其合并到 Stripe token

javascript - 如何判断用户想看哪个帖子,并从firebase获取相应的数据?

javascript - 属性 'WebForm_AutoFocus' 的值为 null 或未定义,不是 Function 对象

javascript - React BootstrapTable如何动态为firebase数据创建行

security - 如何使用 GCC 和 Clang(或一般的 LLVM)减轻 Spectre