javascript - 如何保护将 Firebase 存储用于以下应用程序的网站?
问题描述
我刚刚创建了一个购物网站,用户可以在其中购买产品并获取 PDF 生成的有关其订单的发票/账单。发票需要在客户端生成并存储在 Firebase 存储服务中,以便用户和管理员(我)可以随时使用。问题是,由于发票是从客户端生成并发送到 firebase 存储的,因此用户可以查看我的代码、修改 Javascript 代码并在 firebase 存储上上传任何其他文件或损坏的文件或修改后的发票。
我该怎么做才能允许在 firebase 存储中写入文件但用户看不到或修改 js 代码?我可以对 Firebase 安全规则做些什么吗?
解决方案
不应在客户端生成发票,并且您无法采取任何措施来防止逆向工程,尤其是在 Web 上。安全规则无法扫描您的 PDF 文件的内容。他们能做的最好的事情就是检查谁在上传文件以及文件大小和一些元数据。
您应该更改工作流程以确保在服务器端(或云功能)生成发票。一种方法是添加包含订单详细信息的文档,例如总金额和您需要的任何详细信息,然后使用Firestore Triggers运行云功能。本质上,这将在将新文档添加到 Firestore 时运行云功能。
exports.createInvoice = functions.firestore
.document('invoices/{invoiceID}')
.onCreate((snap, context) => {
const invoiceData = snap.data();
// perform desired operations ...
});
客户无法更改云功能中的代码,因此如果您在云功能中创建发票然后将其上传到云存储,它会更安全。
题外话,我不会费心以 PDF 格式存储发票(除非有任何法律要求)。在 Firestore 中存储发票数据就足够了,您可以在需要时获取它(只需给客户一份副本)。
推荐阅读
- reactjs - 嵌套花括号导致 React 中的三元错误
- ruby-on-rails - 我希望我的搜索栏查找嵌套值,但我的 WHERE LIKE 有问题
- google-chrome - 在网络选项卡上过滤请求时如何永久禁用 chrome 的警告
- node.js - 无法从已编译的 TypeScript/NPM/Webpack 模块启动类
- sql-server - 将多个查询结果返回到单个数据集中
- arrays - How to read multiple ids from URL in cgi
- php - 将 .htaccess 转换为 web.config 时出现错误 404
- ms-access - 根据名称选择自动填充访问表单
- amazon-web-services - AWS SNS 退出回复不会停止消息
- php - 雄辩的关系混乱