har*_*ash 10 php file-upload amazon-s3 amazon-web-services aws-lambda
我使用S3接受从用户到S3的直接上传.因此,我将使用预先签名的网址.
成功上传后,AWS Lambda将确保文件上传是图像,然后客户端将告诉我的服务器他已完成上传.
然后我的服务器将检查S3中是否存在该文件(如果Lambda检测到无效图像,则将其删除).如果是,那么应用逻辑的其余部分将遵循.
但是,这种机制存在漏洞.在告诉我的服务器他已经完成上传(并且最初传递有效文件)之后,用户可以使用相同的URL来上传恶意文件.
Lambda仍然会删除该文件,但现在我的服务器会认为文件存在而实际上并不存在.
有没有办法生成一次性上传预先签名的网址,或者是否有可能强制使生成但尚未过期的网址无效?
一个预签名URL过期在设定的日期/时间。这是不可能的创建一个一次性签约前使用的URL。
也不可能使预签名URL无效。但是,预签名URL 使用预签名URL 引用的访问密钥中的权限。如果从链接到访问密钥的用户中删除了权限,则预签名的URL将不起作用。
把它变成答案...
上传文件后,让Lambda(使用Copy Object API)将其移动uploads/123.png
到,即从移到received/123.png
或类似的东西。
如果恶意用户尝试重用已签名的URL,它将转到uploads/123.png
。最坏的情况是,Lambda会再次检查它并拒绝新文件。由于您的服务器在寻找received/
而不是在uploads/
处理文件,因此我们使事情变得安全。
归档时间: |
|
查看次数: |
3230 次 |
最近记录: |