我刚刚意识到,如果我允许浏览器将文件上传到我的S3存储桶中(使用来自我的服务器的会话令牌),攻击者就可以使用已知的对象键来使用这些临时权限来覆盖那些文件(并替换为恶意或空内容)。
有人说解决方案是使用对象版本控制,但我想知道lambda函数是否可以拦截PutObject请求,检查存储桶中是否已经存在该键,如果存在,则拒绝该操作。
发布于 2019-05-01 17:17:37
简短的回答是否定的。
这是因为S3最终是一致的。即使您做了一些聪明的事情,比如尝试使用getObject来查看文件是否存在,您也很可能在预期来自攻击者的繁重的快速负载下得到一个假阴性。
如果你想确保一个带签名的url只被使用一次,那么你必须用你自己的功能替换带签名的url功能。一个例子是使用API Gateway + Lambda + DynamoDB。在这种情况下,您将创建一个'upload token‘,并将其保存到DynamoDB并返回给用户。当用户随后使用令牌上传文件时,它将从DynamoDB中删除(可以立即保持一致)。
https://stackoverflow.com/questions/55927140
复制相似问题