firebase - 任何用户如何在没有身份验证的情况下在 Firebase 中安全地写入我的数据库?
问题描述
因此,如果我有一个不需要登录/身份验证的电子商务应用程序,并且我的用户在商店中购买,那么在验证交易后,后端会将订单写入数据库。
问题是我的实时数据库仅依赖于 Stripe 事务密钥(即有人为某件商品付费)才能在数据库上写入,因为我的规则设置为任何人都可以写入,否则我需要每个用户都登录在,但这不是我想要的。
Firebase 最近通知我,我的规则很弱。
如何确保我的用户能够以安全的方式为我的应用程序写入我的数据库,而无需登录/验证?
解决方案
您可以在 Firebase 中使用许多不同的安全模型,了解每种模型提供的安全级别非常重要。
要研究的一件事是匿名身份验证,它可以让您“验证”用户,而无需实际要求他们提供任何凭据。这提供了一种方法来保证在多次读取/写入之间使用相同的设备。
在您的具体情况下,听起来您可能希望依赖无法猜测的令牌。对于某些用例来说,这可能是一个有效的安全模型,只要密钥足够复杂以至于无法猜测。
在最基本的情况下,您为不可猜测的 URL 构建安全规则的方式类似于:
{
"rules": {
"transactions": {
"$key": {
".read": true,
".write": true
}
}
}
}
这允许用户在例如读/写特定节点,transactions/abc123xyzunguessable
但重要的是不允许读/写父transactions
节点。安全性来自这样一个事实,即只有最初获得不可猜测令牌的人将来才能再次提供它。
一个更好的实现将在$key
匹配预期的不可猜测的格式上进行门控写入,添加验证和其他读/写规则以确保数据格式正确,并且还可能防止修改关键字段。
这些只是一些提示,但应该可以帮助您。重要的是确保您永远不会将重要信息留在可以通过容易猜到的 URL 读取的地方。
推荐阅读
- python - 嵌套数组中数组的排序及其出现
- python - 从磁盘读取大量小型 .txt 文件的最佳 Pythonic 方法是什么,应用数据提取逻辑并将结果存储在数据库中?
- excel - Excel - 查找每种产品类型的前 3 名价格的平均值
- amazon-web-services - ECS 计划任务未执行
- kubernetes - 如何使用 terraform 为自动创建的 GKE 集群和服务防火墙规则启用 Logconfig
- python - 如何使用 PyAnsys 和 PyVista 创建共享拓扑
- rpm - 使用 rpm specfile 获取要安装的文件
- c - 我如何知道要为“%zi” printf 说明符传递哪种类型?
- python - “动态”使用 .cmd/.bat 中的文件名
- flutter - 如何从 Flutter 中的列表中删除字符串范围