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

Javascript 火基。授予客户端直接写入服务器上数据库的访问权限是否安全?,javascript,security,firebase-realtime-database,Javascript,Security,Firebase Realtime Database,我正在探索谷歌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"

我正在探索谷歌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);
}
private void WriteNewScore(字符串userId,int分数)
{
//在/user scores/$userid/$scoreid和/leadboard/$scoreid同时创建新条目
string key=mDatabase.Child(“分数”).Push().key;
排行榜条目=新的排行榜条目(用户ID、分数);
Dictionary entryValues=entry.ToDictionary();
Dictionary childUpdates=新建字典();
childUpdates[“/scores/”+key]=entryValues;
childUpdates[“/user scores/”+userId+“/”+key]=entryValues;
mDatabase.UpdateChildrenAsync(childUpdates);
}
如果客户端可以被“模拟”或黑客攻击等等,那么应该使用AppEngine和REST接口吗?它实现服务器端安全逻辑,用于更改数据库或直接使用数据库,这是正确和安全的方法吗?或者是否有任何特定的解决方案来保证Firebase中数据库的安全?谢谢

文档页面:

有一个,允许您描述数据的验证和访问规则。有了正确的规则,这可以和您自己编写的任何服务器端代码一样安全

例如,对于共享的代码片段,您将希望:

  • 验证所写分数的格式是否正确,是否符合预期范围
  • 验证
    /scores/$key
    /user scores/$uid/$key
    的值是否相同
  • 确保用户只能在自己的
    $uid
    下写入
这些规则以及更多的规则都包含在和中

您可以在这些安全规则中执行非常高级的操作。例如,我看到有人验证了国际象棋的棋步,还有人在这些规则中构建了一个安全的玩家对玩家的买卖系统

但编写此类规则的容忍度因开发者而异。许多开发人员更习惯于在命令式代码中执行此类(验证和访问)逻辑,在这种情况下,使用自定义服务器端代码也可以。如果这是您的偏好,我建议您签出,这样做很容易,并且可以与许多Firebase产品(如实时数据库)很好地集成。

有一个,允许您描述数据的验证和访问规则。有了正确的规则,这可以和您自己编写的任何服务器端代码一样安全

例如,对于共享的代码片段,您将希望:

  • 验证所写分数的格式是否正确,是否符合预期范围
  • 验证
    /scores/$key
    /user scores/$uid/$key
    的值是否相同
  • 确保用户只能在自己的
    $uid
    下写入
这些规则以及更多的规则都包含在和中

您可以在这些安全规则中执行非常高级的操作。例如,我看到有人验证了国际象棋的棋步,还有人在这些规则中构建了一个安全的玩家对玩家的买卖系统


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

他们只能访问您为该用户配置的节点,并且只能在部署该节点的应用程序的上下文中访问该节点,这是因为没有身份验证,任何人都无法直接访问您的数据库。同样,您必须配置认证方法和安全规则,以管理与Firebase数据库的连接。他们只能访问您为该用户配置的节点,并且只能在部署该节点的应用程序的上下文中访问该节点,这是因为没有身份验证,任何人都无法直接访问您的数据库。同样,您必须配置身份验证方法和安全规则,以管理与Firebase数据库的连接