Firestore 安全规则使用户能够在 React Native 中删除其个人资料

问题描述 投票:0回答:1

任何人都可以告诉我这些 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;

我的应用程序中的删除个人资料功能也是我不想冒险的一条路吗?

firebase react-native google-cloud-firestore expo firebase-security
1个回答
0
投票

安全不是一个是/否的问题,因此询问一个开放式的“我在这里错过了什么”很难明确回答。

也就是说,以下是一些值得注意的事情:

在创建时强制执行
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; // 👈
最新问题
© www.soinside.com 2019 - 2025. All rights reserved.