如何保护为以下应用程序使用 firebase 存储的网站?
How can I secure my website that uses firebase storage for the following application?
我刚刚创建了一个购物网站,用户可以在该网站上购买产品并获得生成的 PDF invoice/bill 关于他们的订单。
发票需要在客户端生成并存储在 firebase 存储服务中,以便用户和管理员(我)可以随时使用。
问题是,由于发票是从客户端生成并发送到 firebase 存储的,因此用户可以查看我的代码,修改 Javascript 代码并在 firebase 上上传任何其他文件或损坏的文件或修改过的发票存储空间。
如何在firebase存储中允许写入文件,但用户看不到或修改js代码?我可以使用 Firebase 安全规则做些什么吗?
不应在客户端生成发票,并且您无法采取任何措施来防止逆向工程,尤其是在网络上。安全规则无法扫描您的 PDF 文件的内容。他们最多只能检查谁在上传文件以及文件大小和一些元数据。
您应该更改工作流程以确保在服务器端(或云功能)生成发票。一种方法是添加一个包含订单详细信息的文档,例如总金额和您需要的任何详细信息,然后 运行 使用 Firestore Triggers 的云函数。本质上,当新文档添加到 Firestore 时,这将 运行 一个云函数。
exports.createInvoice = functions.firestore
.document('invoices/{invoiceID}')
.onCreate((snap, context) => {
const invoiceData = snap.data();
// perform desired operations ...
});
客户端无法更改云函数中的代码,所以如果您在云函数中创建发票,然后将其上传到云存储,会安全得多。
题外话,我不会费心以 PDF 格式存储发票(除非有任何法律要求)。在 Firestore 中存储发票数据应该足够了,您可以在需要时获取它(只需将副本提供给客户)。
我刚刚创建了一个购物网站,用户可以在该网站上购买产品并获得生成的 PDF invoice/bill 关于他们的订单。 发票需要在客户端生成并存储在 firebase 存储服务中,以便用户和管理员(我)可以随时使用。 问题是,由于发票是从客户端生成并发送到 firebase 存储的,因此用户可以查看我的代码,修改 Javascript 代码并在 firebase 上上传任何其他文件或损坏的文件或修改过的发票存储空间。
如何在firebase存储中允许写入文件,但用户看不到或修改js代码?我可以使用 Firebase 安全规则做些什么吗?
不应在客户端生成发票,并且您无法采取任何措施来防止逆向工程,尤其是在网络上。安全规则无法扫描您的 PDF 文件的内容。他们最多只能检查谁在上传文件以及文件大小和一些元数据。
您应该更改工作流程以确保在服务器端(或云功能)生成发票。一种方法是添加一个包含订单详细信息的文档,例如总金额和您需要的任何详细信息,然后 运行 使用 Firestore Triggers 的云函数。本质上,当新文档添加到 Firestore 时,这将 运行 一个云函数。
exports.createInvoice = functions.firestore
.document('invoices/{invoiceID}')
.onCreate((snap, context) => {
const invoiceData = snap.data();
// perform desired operations ...
});
客户端无法更改云函数中的代码,所以如果您在云函数中创建发票,然后将其上传到云存储,会安全得多。
题外话,我不会费心以 PDF 格式存储发票(除非有任何法律要求)。在 Firestore 中存储发票数据应该足够了,您可以在需要时获取它(只需将副本提供给客户)。