如何保护将 Firebase 存储用于以下应用程序的网站?

Posted

技术标签:

【中文标题】如何保护将 Firebase 存储用于以下应用程序的网站?【英文标题】:How can I secure my website that uses firebase storage for the following application? 【发布时间】:2021-09-29 08:45:10 【问题描述】:

我刚刚创建了一个购物网站,用户可以在该网站上购买产品并获取有关其订单的 PDF 生成发票/账单。 发票需要在客户端生成并存储在 Firebase 存储服务中,以便用户和管理员(我)可以随时使用。 问题是,由于发票是从客户端生成并发送到 firebase 存储的,因此用户可以查看我的代码、修改 javascript 代码并在 firebase 存储上上传任何其他文件或损坏的文件或修改后的发票。

我该怎么做才能允许在 firebase 存储中写入文件但用户无法查看或修改 js 代码?我可以使用 Firebase 安全规则做些什么吗?

【问题讨论】:

【参考方案1】:

不应在客户端生成发票,并且您无法采取任何措施来防止逆向工程,尤其是在网络上。安全规则无法扫描您的 PDF 文件的内容。他们能做的最好的事情就是检查谁在上传文件以及文件大小和一些元数据。

您应该更改工作流程以确保在服务器端(或云功能)生成发票。一种方法是添加包含订单详细信息的文档,例如总金额和您需要的任何详细信息,然后使用Firestore Triggers 运行云功能。本质上,这将在将新文档添加到 Firestore 时运行云功能。

exports.createInvoice = functions.firestore
    .document('invoices/invoiceID')
    .onCreate((snap, context) => 
      const invoiceData = snap.data();
      // perform desired operations ...
    );

客户无法更改云函数中的代码,所以如果您在云函数中创建发票,然后将其上传到云存储,它会更安全。

题外话,我不会费心以 PDF 格式存储发票(除非有任何法律要求)。在 Firestore 中存储发票数据就足够了,您可以在需要时获取它(只需给客户一份副本)。

【讨论】:

以上是关于如何保护将 Firebase 存储用于以下应用程序的网站?的主要内容,如果未能解决你的问题,请参考以下文章

如何在不使用 Firebase 身份验证的情况下保护 Firebase 存储? (下一个)

无论如何都可以将firebase存储用于flutter桌面吗?

Firebase 上传保护

将 REST API 用于 id 令牌时对 Firebase 存储进行身份验证

Firebase 身份验证和实时应用程序数据库如何保护自身?

如何将图像从颤动的资产上传到firebase存储?