为什么 DirectUploadsController#create 将校验和作为参数?

问题描述 投票:0回答:1

我正在构建一个带有自定义(反应)前端的主动存储直接上传组件,因此我没有使用开箱即用的 Rails 前端助手。

当我将文件数据发布到后端以获取预签名的网址时,我遇到了这个问题:

ArgumentError (missing keyword: :checksum):

在这里您可以看到控制器需要来自前端的校验和参数。

这有什么意义呢?为了在前端计算校验和,AWS 密钥需要位于客户端,这是一个巨大的安全缺陷。这个假设不正确吗?我是不是误会了什么?

ruby-on-rails amazon-s3 rails-activestorage
1个回答
0
投票

我不熟悉 Rails,但要求 S3 上传提前校验和是一种非常常见的模式

流程如下:

  • 前端计算要上传的文件的MD5校验和并将其发送到后端。

  • 后端生成一个预签名的上传 URL,其中包含校验和以及 S3 检查它的指令。

  • 前端使用预签名 URL 将文件直接上传到 S3。

  • S3计算上传文件的校验和。如果与 URL 中的校验和不匹配,则会拒绝上传。

如果上传 URL 泄露,攻击者将无法使用它上传除具有相同 MD5 校验和的文件之外的任何内容。

前端在上传之前确实需要知道文件内容以计算校验和,但不需要 AWS 密钥来执行此操作。

© www.soinside.com 2019 - 2024. All rights reserved.