你怎么知道你的 Firebase 安全规则是否足够好,所以你不会被黑客攻击?

How do you know if your firebase security rules are good enough so you can't get hacked?

我是 firebase 的新手,我不确定我的 firebase 安全规则是否足够好,所以没有人可以侵入我的数据库并随意更改。您如何知道您的 Firebase 安全规则是否有效?

我真的不想让任何人更改任何数据,除非他们是当前用户,只更改他们的个人数据。

这是我当前的 firebase 安全规则的图片:

我怎么知道我的 Firebase 安全规则是否有效?

也不确定这是否有用,但我的 firestore 数据中只有 2 个集合。第一个是“用户”,它只有我的用户的基本信息(姓名、电子邮件地址等)。第二个是“posts”,它只有 post 的基本信息(点赞、评论等)

How do you know if your firebase security rules are good enough so you can't get hacked?

这真是无解。这就像问“我怎么知道我是世界上最聪明的人”;不和世界上的每一个人进行一场脑力大战,你就不会知道这一点。

您的安全规则有点像那样,只是您不是在与 其他人 竞争,而是与试图以恶意方式访问您的数据的人竞争。而不是一场未定义的大脑之战,你是在根据他们的演绎技能和对 API.

的熟悉程度来推销你的安全规则(他们看不到)

良好的安全规则只允许您的代码执行的操作,而不是其他任何事情。


这方面的一个很好的例子是您的第一个 create 规则:

match /users/{userID} { 
  allow create: if true;
}

因此,这条规则允许世界上的任何人在您的数据库中以他们想要的任何 ID 创建文档,只需调用 firebase.firestore().document("users/IAMTREV347").set({ whateverKeyIWant: "WithWhateverValue" })

您自己的代码可能比那更受限制。比如你好像想把文档存到/users/$uid,所以在你app中当前用户的UID下。在可能是这样的代码中:

const uid = firebase.auth().currentUser.uid;
firebase.firestore().collection("users").doc(uid).set({ 
  uid: uid,
  name: "Trev345" 
})

因此您需要将代码收紧到:

  1. 只允许用户将自己的 UID 作为文档 ID 并在 uid 字段中写入文档。
  2. 只允许用户在该文档中写入 name 字段。

如果您这样修改您的规则,它们将完全允许代码执行的操作,而不会允许任何人滥用它们。

所以正确的创建规则是:

match /users/{userID} { 
  allow create: if request.auth.uid == $userID && 
                   request.document.data.uid == $userID && 
                   (request.resource.data.keys().hasOnly(['name', 'uid']));
}

您应该像这样检查每条规则并检查访问数据库的每段代码,并授予允许代码工作的最低权限。