Security 保护S3存储桶免受第三方上传的重播攻击

Security 保护S3存储桶免受第三方上传的重播攻击,security,amazon-web-services,file-upload,amazon-s3,architecture,Security,Amazon Web Services,File Upload,Amazon S3,Architecture,我正在为客户端创建一种方法,将大文件上传到S3,供我们处理 我构建了一种机制,允许客户机发送他们拥有的文件列表,作为回报,他们会收到一个HTTP请求,需要发送到S3,并附上他们提供的其中一个文件的文件。这消除了服务器上传的压力,我们可以通过S3 bucket的通知获取任何上传的文件 我的问题是重播攻击。如果某一方要求发送一个文件并接收回请求,他们可以一遍又一遍地重播相同的请求,从而使我们在请求中付出代价。我不在乎覆盖文件,因为Contents-MD5头强制文件为同一个文件(尽管存在冲突)。我也不

我正在为客户端创建一种方法,将大文件上传到S3,供我们处理

我构建了一种机制,允许客户机发送他们拥有的文件列表,作为回报,他们会收到一个HTTP请求,需要发送到S3,并附上他们提供的其中一个文件的文件。这消除了服务器上传的压力,我们可以通过S3 bucket的通知获取任何上传的文件

我的问题是重播攻击。如果某一方要求发送一个文件并接收回请求,他们可以一遍又一遍地重播相同的请求,从而使我们在请求中付出代价。我不在乎覆盖文件,因为
Contents-MD5
头强制文件为同一个文件(尽管存在冲突)。我也不在乎再次收到文件上传完成的通知

我考虑生成一个策略,该策略只允许使用特定令牌进行上传,该令牌每X分钟更改一次。如果有人想重播攻击,他们将失败,必须重新请求我们的S3请求(这将失败,因为上传已经提前完成)。我不确定轮换这样一个代币的最佳实践是什么,我担心这也会导致很多合法的请求,这些请求需要很长时间才能开始失败

在这种情况下,有没有其他我不知道应该使用的机制

担心这也会导致许多合法请求的失败,这些请求需要很长时间才能开始

您可以通过在短的过期时间内对URL进行签名来消除这种担忧。身份验证和授权(包括签名验证)发生在请求开始时。S3不会中断上传或下载,因为签名在长请求的中间过期。p> 以编程方式反复动态更改bucket策略绝对不是最佳做法


注意,似乎没有明确记录,但当S3拒绝请求时,每个请求的费用(可以忽略,但仍然不为零)显然仍然适用,因此,让S3拒绝对相同内容的相同对象进行冗余覆盖不太可能是一个值得实现的解决方案。

您提到的这两件事让我感到困惑:“他们需要发送到S3的HTTP请求”和“消除了服务器上传的压力”?如果有人将一个文件作为附件发送到您的服务器,而您将其上载,那么如何使您的服务器摆脱上载的压力?我是不是遗漏了什么?@ketan我们预计会有很多并发的数十MB的文件请求。让它们全部到达服务器意味着必须有数千个长期存在的连接。相反,我们用一点信息快速回复,将与S3的长期连接卸载。您所说的非常有意义。由于将数据传输到S3不需要任何成本,因此此级别的任何解决方案的成本都与根本没有解决方案的成本相同。