保护 S3 存储桶免受来自第 3 方上传的重放攻击
Securing S3 Bucket Against Replay Attacks From 3rd Party Uploads
我正在为客户创建一种将大文件上传到 S3 供我们处理的方法。
我建立了一种机制,允许客户端发送他们拥有的文件列表,在 return 他们得到一个 HTTP 请求,他们需要发送到 S3,以及其中一个文件的附加文件他们提供。这消除了从我们的服务器上传的压力,我们可以从 S3 存储桶中获取通过通知上传的任何文件。
我的问题是重放攻击。如果某一方要求发送文件并收到返回的请求,他们可以一遍又一遍地重播相同的请求,从而使我们在请求中付出代价。我不关心覆盖文件,因为 Contents-MD5
header 强制文件成为同一个文件(尽管有冲突)。我也不在乎再次通知文件完成上传。
我考虑过生成一个只允许使用特定令牌上传的策略,该令牌每 X 分钟更改一次。如果有人想重播攻击,他们会失败并且必须 re-request 来自我们的 S3 请求(这会失败,因为上传已经预先完成)。我不确定轮换这样的令牌有多少最佳实践,我担心它还会导致大量合法请求花费太长时间才开始失败。
在这种情况下是否应该使用我不知道的任何其他机制?
worried it would also cause lots of legitimate requests that are taking too long to start to fail.
您可以通过签署具有较短到期时间的 URL 来消除这种特殊的担忧。身份验证和授权,包括签名验证,发生在请求的开始。 S3 不会缩短上传或下载时间,因为签名会在长请求的中间过期。
以编程方式、反复地动态更改存储桶策略绝对不是最佳做法。
请注意,似乎没有明确记录,但当 S3 拒绝请求时,(可忽略不计,但仍然 non-zero)per-request 费用显然仍然适用,因此让 S3 拒绝对具有相同内容的同一对象进行冗余覆盖不太可能是值得实现的解决方案。
我正在为客户创建一种将大文件上传到 S3 供我们处理的方法。
我建立了一种机制,允许客户端发送他们拥有的文件列表,在 return 他们得到一个 HTTP 请求,他们需要发送到 S3,以及其中一个文件的附加文件他们提供。这消除了从我们的服务器上传的压力,我们可以从 S3 存储桶中获取通过通知上传的任何文件。
我的问题是重放攻击。如果某一方要求发送文件并收到返回的请求,他们可以一遍又一遍地重播相同的请求,从而使我们在请求中付出代价。我不关心覆盖文件,因为 Contents-MD5
header 强制文件成为同一个文件(尽管有冲突)。我也不在乎再次通知文件完成上传。
我考虑过生成一个只允许使用特定令牌上传的策略,该令牌每 X 分钟更改一次。如果有人想重播攻击,他们会失败并且必须 re-request 来自我们的 S3 请求(这会失败,因为上传已经预先完成)。我不确定轮换这样的令牌有多少最佳实践,我担心它还会导致大量合法请求花费太长时间才开始失败。
在这种情况下是否应该使用我不知道的任何其他机制?
worried it would also cause lots of legitimate requests that are taking too long to start to fail.
您可以通过签署具有较短到期时间的 URL 来消除这种特殊的担忧。身份验证和授权,包括签名验证,发生在请求的开始。 S3 不会缩短上传或下载时间,因为签名会在长请求的中间过期。
以编程方式、反复地动态更改存储桶策略绝对不是最佳做法。
请注意,似乎没有明确记录,但当 S3 拒绝请求时,(可忽略不计,但仍然 non-zero)per-request 费用显然仍然适用,因此让 S3 拒绝对具有相同内容的同一对象进行冗余覆盖不太可能是值得实现的解决方案。