如果您让任何人读取数据但不写入数据,Firestore的安全性如何

时间:2020-05-12 21:38:32

标签: firebase authentication google-cloud-firestore

因此,从本质上讲,我正在尝试设置注册,用户需要特殊的密钥才能进行注册和注册。根据我的研究,firebase没有任何内置工具可以完成此任务。

这是我的解决方案。实际上,我有一个称为secret的集合,然后在其中具有不同的文档,其中文档的id是关键。此集合的安全规则为:允许读取:true,允许写入:false。

现在基本上是当用户在填写包含电子邮件,密码和密钥的表单后按下注册。该功能运行

const handleSignUp = useCallback(async event => {
    event.preventDefault();
    const {email, password, secretkey} = event.target.elements;

    const usersRef = db.collection('secret').doc(secretkey.value)

    usersRef.get()
        .then(async (docSnapshot) => {
            if (docSnapshot.exists) {
                //console.log("true", docSnapshot.data())
                try {
                    const re = await app
                        .auth()
                        .createUserWithEmailAndPassword(email.value, password.value);



                } catch (error) {
                    alert(error);
                }

            } else {
                alert("Please enter a valid secret Key, or contact help@company.com  for further assistance")
            }
        });

});

这是我的问题。机密集合的安全性如何,尤其是因为读取权限设置为true。我的假设是它是安全的,因为我的应用已设置为只能在我的域上运行。因此,即使有人拥有firebase配置键,他们也无法读取机密集合数据。我说的对吗?

2 个答案:

答案 0 :(得分:2)

如果您允许所有读取,则用户可以对整个集合执行get()以获取所有文档的列表。他们可以使用它来读取所有文档以及其中的秘密值。

我知道保护这一点的唯一方法是:

  1. 使实际机密值成为文档的ID。

  2. 允许get访问文档,但不允许list进入集合。

    如果您从未这样做过:readlist + get的简写。请参阅granular operations上的文档。

答案 1 :(得分:0)

没有security rules来确定which authenticated users can read the data in the database,任何人都将能够读取数据,并且这是绝对不安全的。

如果您不使用Firebase身份验证,那么就不可能编写安全规则来限制仅从您的应用程序对集合的访问。