任何人都可以告诉我这些 Firebase 安全规则可能会让我的 React Native Expo 应用程序面临哪些漏洞,或者其中的某些方面是否不必要:
match /users/{userId} {
allow read: if request.auth != null;
allow create: if request.auth != null
&& request.auth.uid == request.resource.data.id;
allow update: if request.auth != null
&& request.auth.uid == request.resource.data.id
&& request.auth.uid == userId;
allow delete: if request.auth != null;
}
我相信前三个允许规则适合我的应用程序,因为它要求每个用户都可以看到其他所有用户的个人资料,因为它是社交媒体网站,但我不能 100% 确定。
下面这行是我最关心的,但为了允许用户选择删除他们的个人资料,这是必要的。
allow delete: if request.auth != null;
我的应用程序中的删除个人资料功能也是我不想冒险的一条路吗?
安全不是一个是/否的问题,因此询问一个开放式的“我在这里错过了什么”很难明确回答。
也就是说,以下是一些值得注意的事情:
userId
文档 ID 您缺少 create 子句中的 request.auth.uid == userId 检查。除非有特定原因不想在创建时强制执行该检查,否则我建议:
allow create: if request.auth != null
&& request.auth.uid == request.resource.data.id
&& request.auth.uid == userId; // 👈
id
字段我建议禁止更新
id
字段,除非您需要允许转移文档的所有权(在这种情况下您的规则将变得更加复杂)。
基于更简单的情况,那就是:
allow update: if request.auth != null
&& request.auth.uid == request.resource.data.id
&& request.auth.uid == resource.data.id // 👈
&& request.auth.uid == userId;
现在任何用户都可以删除任何文档,这是一个很大的安全风险。
我猜你会希望每个用户只能删除自己的文档,即:
allow delete: if request.auth != null
&& request.auth.uid == resource.data.id // 👈
&& request.auth.uid == userId; // 👈