我正在开发一个PoC (概念证明)应用程序,用户可以将壁纸下载到他们的设备上。所有数据都使用& Storage提供。
此应用程序没有登录。任何人都可以下载应用程序,并立即下载她或他想要的壁纸。
记住这一点..。I希望有一个计数器来跟踪每个特定墙纸被下载多少次。
当我有了它的“工作”-我在质疑我在火基地建立的规则。
rules_version = '2';
service cloud.firestore {
match /databases/{database}/documents {
match /{document=**} {
allow read;
allow write: if request.auth != null;
allow update: if request.resource.data.counter is number;
}
}
}我的思维过程与上述规则有关:
)
这是我要质疑的最后一条规则。
这是一种安全的部署到生产中的安全方法吗?
再次-没有登录此应用程序,用户可以下载所有的壁纸,没有身份验证,并将有一个计数器旁边的每一个壁纸,供用户查看多少次每个壁纸已被下载。
发布于 2020-02-20 16:32:48
就该词的任何正常定义而言,这些规则并不是“安全的”。这是他们允许的。任何拥有互联网连接的人,如果知道项目的名称(这很容易获得),可以:
对database
counter数值的现有文档(它甚至不必增加,也不必是正整数)除此之外,任何能够获得Firebase Auth ID令牌的人(同样,对于确定的攻击者来说并不是非常困难),都可以在数据库中完全创建和编写任何文档。如果您说您的应用程序中根本没有Auth,那么这并不是真正的问题,但是如果您的项目被配置为允许任何形式的身份验证,攻击者就有可能开始编写任何东西。
你会收到Firebase的电子邮件,说你的规则不安全,主要是因为你允许每个人阅读所有的东西。
您应该做的是更具体地定义您的安全需求,然后将其转换为实际满足这些需求的规则。如果您希望允许对任何类型的数据库进行未经身份验证的写访问,则会遇到一些麻烦,因为无法确保该访问确实与您试图测量的下载行为相匹配。在管理下载的任何过程中,计算下载量会更好,这可能需要一个比现在更复杂的后端。
但是,如果允许公共读/写访问确实是您想要允许的,那么将您的规则变得更具体会更好。例如,您可以限制匿名用户可以写入的集合,并确保如果这些都是您想要的,那么它们只能增加计数器。
https://stackoverflow.com/questions/60252601
复制相似问题