我正在创建一个Unity游戏,我想在其中列出带有用户名的全球前50名得分列表。我使用Firebase实时数据库。无需用户进行身份验证。我对数据库安全性并不太熟悉,并且对这个概念还很陌生。我正在使用Unity Asset Store中的Rest Api,因为它很容易从databse发送和获取数据。
如何确定发送到数据库的每个分数都来自我的应用程序?
答案 0 :(得分:2)
使用密码将专用用户添加到数据库中
在您应用的某处添加这些凭据,例如在ScriptableObject /某些组件中
始终使用这些凭据进行身份验证
请注意,您的应用仍可以反编译并因此被欺骗。
您至少可以通过加密数据等来使其变得更加困难。
唯一可行的方法是拥有一个帐户和会话服务器,以确保用户被有效的会话锁定。
答案 1 :(得分:1)
如果您不使用Firebase身份验证,则不能限制谁可以访问您的数据库。任何人都可以发出查询,他们甚至可以使用Realtime Database REST API进行查询。他们只需要知道您的项目名称即可。
即使您确实使用了Firebase身份验证,任何人仍然可以使用其他公共API有效地对您的应用之外的数据库进行身份验证和访问。
答案 2 :(得分:1)
我的经验是,您不能阻止专门的“用户”以高分欺骗全球。我制作了一小部分用于全球排名前50位的Windows Phone琐碎游戏。即使您的游戏不受欢迎,并且您混淆了代码,并且在不受欢迎的平台上,并且您加密了网络流量,所以有人会越狱手机,反编译您的应用程序,然后在将高分发送到全局列表之前将自己的高分注入游戏。我想出解决这个问题的唯一方法是在服务器上跟踪游戏时段,以确保根据他们玩了多长时间理论上可以得分。
答案 3 :(得分:0)
免责声明:我对Firebase一无所知
据我所知,您将需要为配置的Default
和Public
部分设置访问权限,以告诉数据库谁可以访问您的数据库,而不能访问您的数据库。这是他们在Get Started with Database Rules上的文档。
在一般的数据库访问中,没有人应该知道您与数据库的连接的详细信息,因此所有调用仅应来自您的应用程序。