没有身份验证,任何用户如何在Firebase中安全地写入我的数据库?

没有身份验证,任何用户如何在Firebase中安全地写入我的数据库?,firebase,firebase-realtime-database,firebase-authentication,Firebase,Firebase Realtime Database,Firebase Authentication,因此,如果我有一个不需要登录/验证的电子商务应用程序,并且我的用户在商店购买,那么在验证交易后,后端会将订单写入数据库 问题是,我的实时数据库仅仅依赖于条带事务密钥(即,有人为某个项目付费)才能在数据库上写入,因为我的规则设置为任何人都可以写入,否则我将需要每个用户登录,但这不是我想要的 Firebase最近通知我我的规则很弱 如何确保我的用户能够在不登录/Auth的情况下以安全的方式为我的应用程序写入我的数据库?没有“安全”的方式允许在没有Firebase身份验证的情况下写入实时数据库。如果没

因此,如果我有一个不需要登录/验证的电子商务应用程序,并且我的用户在商店购买,那么在验证交易后,后端会将订单写入数据库

问题是,我的实时数据库仅仅依赖于条带事务密钥(即,有人为某个项目付费)才能在数据库上写入,因为我的规则设置为任何人都可以写入,否则我将需要每个用户登录,但这不是我想要的

Firebase最近通知我我的规则很弱

如何确保我的用户能够在不登录/Auth的情况下以安全的方式为我的应用程序写入我的数据库?

没有“安全”的方式允许在没有Firebase身份验证的情况下写入实时数据库。如果没有Firebase Auth,则可能存在完全公共访问权限,或者根本没有公共访问权限


如果您不能使用Firebase Auth,那么您需要做的是使您的安全规则禁止客户端应用程序对数据库的所有直接访问,然后创建后端API来管理对数据库的访问。您的后端API需要以某种方式验证发出请求的人是否有能力进行所需的更改。然后,它必须使用Firebase Admin SDK将这些更改提交到数据库。

Firebase可以使用许多不同的安全模型,了解每个模型提供的安全级别非常重要

需要研究的一件事是,它允许您“验证”用户,而实际上不需要他们提供任何凭据。这提供了一种方法来保证在多次读/写之间使用相同的设备

在您的特定情况下,听起来您可能希望依赖不可用的代币。对于某些用例,这是一个有效的安全模型,只要密钥足够复杂以至于不可用

最基本的情况是,为不可用URL构建安全规则的方式如下:

{
  "rules": {
    "transactions": {
      "$key": {
        ".read": true,
        ".write": true
      }
    }
  }
}
这允许用户读取/写入特定节点,例如
事务/abc123xyzunguessable
,但重要的是不允许读取/写入父
事务
节点。安全性来自这样一个事实:只有最初获得不可用代币的人才能在将来再次提供该代币

更好的实现方法是在
$key
上进行门写入,以匹配预期的不可用格式,并添加验证和其他读/写规则,以确保数据格式正确,还可能防止修改键字段

这些只是一些提示,但应该会对你有所帮助。重要的是要确保永远不要将重要信息留在一个可以通过容易猜测的URL读取的地方