Amazon S3预签名网址 - 手动无效或一次上传

har*_*ash 10 php file-upload amazon-s3 amazon-web-services aws-lambda

我使用S3接受从用户到S3的直接上传.因此,我将使用预先签名的网址.

成功上传后,AWS Lambda将确保文件上传是图像,然后客户端将告诉我的服务器他已完成上传.

然后我的服务器将检查S3中是否存在该文件(如果Lambda检测到无效图像,则将其删除).如果是,那么应用逻辑的其余部分将遵循.

但是,这种机制存在漏洞.在告诉我的服务器他已经完成上传(并且最初传递有效文件)之后,用户可以使用相同的URL来上传恶意文件.

Lambda仍然会删除该文件,但现在我的服务器会认为文件存在而实际上并不存在.

有没有办法生成一次性上传预先签名的网址,或者是否有可能强制使生成但尚未过期的网址无效?

Joh*_*ein 6

一个预签名URL过期在设定的日期/时间。这是不可能的创建一个一次性签约前使用的URL。

也不可能使预签名URL无效。但是,预签名URL 使用预签名URL 引用的访问密钥中的权限。如果从链接到访问密钥的用户中删除了权限,则预签名的URL将不起作用。


cee*_*yoz 5

把它变成答案...

上传文件后,让Lambda(使用Copy Object API)将其移动uploads/123.png到,即从移到received/123.png或类似的东西。

如果恶意用户尝试重用已签名的URL,它将转到uploads/123.png。最坏的情况是,Lambda会再次检查它并拒绝新文件。由于您的服务器在寻找received/而不是在uploads/处理文件,因此我们使事情变得安全。

  • 我觉得这应该作为 S3 功能来支持,而不是解决。使用预签名一次性上传/下载 S3 对象的 url。 (2认同)