Javascript 在Firestore客户端更新和添加此新文档是否安全?

Javascript 在Firestore客户端更新和添加此新文档是否安全?,javascript,firebase,react-native,google-cloud-firestore,google-cloud-functions,Javascript,Firebase,React Native,Google Cloud Firestore,Google Cloud Functions,在这种情况下,我不知道是应该使用云功能,还是将其保留在客户端。 我正在进行事务更新+设置。这安全吗?一个坏的参与者真的会对数据库中的数据造成伤害吗?我知道我必须设置Firestore规则,只允许经过身份验证的用户,但经过身份验证的坏演员仍然可能误用它,对吗 const refA = firestore().collection('discounts').doc(this.getSelected.discount_id); const refB = firestore().collection('

在这种情况下,我不知道是应该使用云功能,还是将其保留在客户端。 我正在进行事务更新+设置。这安全吗?一个坏的参与者真的会对数据库中的数据造成伤害吗?我知道我必须设置Firestore规则,只允许经过身份验证的用户,但经过身份验证的坏演员仍然可能误用它,对吗

const refA = firestore().collection('discounts').doc(this.getSelected.discount_id);
const refB = firestore().collection('discount_reservations').doc();

const updateFunction = async transaction => {
    const [disc_amountt] = await Promise.all([
        transaction.get(refA),
    ]);

const disc_amount = disc_amountt.data().am; //getting amount field
const decrement = firestore.FieldValue.increment(-(this.state.selected_amount));
const selected_am = this.state.selected_amount;
    
    //update 
        transaction.update(refA, {
            am: decrement,
        });        

    transaction.set(refB, {
        uID: '1',
        dID: this.getSelected.discount_id,
        aR: this.state.selected_amount
    });
};

// run the transaction
firestore().runTransaction(updateFunction)
    .then(result => {
        //.....
    })
如果这是足够安全的,在功能上这样做,会提高应用程序的性能吗

非常感谢您的任何建议

更新

我试图阻止的一个示例场景:


下面是我案例的一个示例场景:有两种收集方式,折扣和折扣预订。当用户想要预订折扣时,我首先检查折扣集合中是否有剩余的折扣,如果有,然后在折扣预订中创建一个文档,其中包含用户选择的折扣金额。现在,问题是,如果一个糟糕的参与者试图在折扣集合中创建一个文档,即使折扣集合中没有折扣了怎么办?!我可以使用安全规则防止这种情况吗?

您的安全规则应该只允许对数据执行您希望允许的操作。如果你注意制定安全规则,你可以只使用安全规则保护应用程序的大部分

本质上:您将在客户端代码和服务器端安全规则之间复制一些业务逻辑。您需要在客户端代码中包含逻辑,因为这有助于用户向数据库提交正确的数据。但您还必须在服务器端安全规则中包含它,因为您不能相信所有操作都来自您自己的代码

实际上,许多开发人员发现很难开始使用安全规则,因此他们在云函数或其他服务器端API中实现其后端功能。这是一种有效的方法,但它只是意味着您现在正在客户端代码和服务器端代码之间复制业务逻辑。这可能更为常见,因为双方现在都是常规代码,在您的情况下,双方甚至都是JavaScript,但您仍然在复制客户端和服务器之间的逻辑


因此,您必须在运行服务器端代码以确保数据正确且用户得到授权这一更为常见的范例与具有安全规则的模型之间进行权衡。这两种方法都可以用于确保几乎任何场景的安全,我经常在大型项目中看到这两种方法的混合。

我对下面的注意事项进行了广泛的解释。除此之外,您还需要为您的场景指定“足够安全”和“足够安全”的含义。在数量上增加性能意味着什么类似。如果没有明确定义您正在寻找/关注的安全和性能的价值,那么很难说得比我所做的更多。感谢您的详细解释!下面是我案例的一个示例场景:有两种收集方式,折扣和折扣预订。当用户想要预订折扣时,我首先检查折扣集合中是否有剩余的折扣,如果有,然后在折扣预订中创建一个文档,其中包含用户选择的折扣金额。现在,问题是,如果一个糟糕的参与者试图在折扣集合中创建一个文档,即使折扣集合中没有折扣了怎么办?!我可以使用安全规则来防止这种情况吗?听起来好像可以在安全规则中进行检查,在折扣预订文档的写入规则中获取折扣文档。