直接从前端将数据上传到 Azure Blob 存储时的安全问题

Posted

技术标签:

【中文标题】直接从前端将数据上传到 Azure Blob 存储时的安全问题【英文标题】:Security concerns when uploading data to Azure Blob Storage directly from frontend 【发布时间】:2021-10-30 14:48:09 【问题描述】:

我正在做一个项目,我们必须在 Azure Blob 存储上存储一些音频/视频文件,上传文件后,我们需要根据文件的长度(以分钟为单位)计算一些价格。我们有一个 Angular 前端,其想法是直接从前端上传文件,从 Azure 获取带有文件 stats 的响应,然后调用后端 API 将该数据放入数据库中。

我想知道的是,在从 Azure 取回文件数据和调用我们的后端 API 之间,操作数据的可能性有多大。在将长度发送到我们的 API 之前,是否有可能修改长度?

【问题讨论】:

您打算如何在文件上传时从 Azure 获取回调?另外,我假设 blob 将作为块 blob 上传。对吗? 是块 blob。公平地说,我在 Azure 方面的经验有限,我假设它类似于 S3 处理上传的方式。回调是指 javascript 回调或承诺,因此基本上是上传完成后的异步响应。 我们的想法是首先使用 webhook 将数据从 Azure 直接传递到我们的后端 API,然后可能会触发一个套接字以将数据返回到前端,或者只是让 webhook 一起发生来自 Azure 的正常 HTTP 响应。但对于一些甚至可能不是问题的事情,这似乎是一个过度设计的解决方案。 请编辑问题以将其限制为具有足够详细信息的特定问题,以确定适当的答案。 【参考方案1】:

一种可能的解决方案是使用 Azure Event Grid 与 Blob 集成。每当上传 Blob 时,都会自动引发一个事件,您可以在 Azure 函数中使用该事件并将数据保存在数据库中。

用户可能会重新上传不同大小的相同文件。如果发生这种情况,您将获得另一个事件(除了首次创建 blob 时的原始事件)。如何处理更新完全取决于您。

【讨论】:

Azure 事件网格中的事件类似于 webhook 对吗?重新上传实际上不是我们考虑过的问题。更关心的是上传一个 10 分钟的文件,但发送它只有 5 分钟。我认为这个解决方案可行。 Events in Azure Event Grid are similar to webhooks am I correct? - 有点,是的。 The concern is more about uploading a 10 minute file but sending that its only 5 minutes long. - 这更像是一个应用程序问题,即您如何验证用户上传的文件。

以上是关于直接从前端将数据上传到 Azure Blob 存储时的安全问题的主要内容,如果未能解决你的问题,请参考以下文章

从 SFTP 服务器将文件上传到 Azure 存储 Blob

使用 AspNet 从 Azure Blob 存储下载和重命名文件

Azure Blob PHP SDK - 直接从自定义多部分 API 请求上传到 Azure 存储

将文件从 Azure 存储 blob 移动到 Ftp 服务器

将csv数据直接写入节点js中的azure blob

将图像上传到 Azure Blob 存储