我试图了解如何通知后端用户已将文件上传到s3,其密钥并阻止用户篡改密钥。
要上传的文件是私有的,这意味着我正在生成签名的GET URL以在用户需要时下载文件。 我正在使用boto3来创建预先指定的POST URL,所以我没有使用自制的实现,但这与库无关。
我有一个javascript前端和一个后端API,上传文件的用户流程可能会更多或更少:
{ filename: 'something.txt size: 12345 type: image/jpeg }
{ url: https://mybucket.s3.amazonaws.com fields: { acl: 'private', key: 'mykey', signature: 'mysignature', policy: 'mybase64 encoded policy' } }
浏览器 - > s3(POST mybucket.s3.amazonaws.com):
请求:
{ acl: 'private', key: 'mykey', signature: 'mysignature', policy: 'mybase64 encoded policy' }
响应(文档aws RESTObjectPOST):
许多JavaScript库和指南(即FineUploader,Heroku)现在只需将POST响应中的密钥代理到后端。然后后端检查文件是否存在,并将新文件密钥添加到其数据库中。
现在,要上传的文件是私有的,这意味着我正在生成签名的GET URL以在用户需要时下载文件。 假设 UserA 和 UserB , UserB 已上传 FileB 。 是什么阻止UserA上传文件,但是向后端发送FileB密钥(可以猜到或者只是随机输入,直到它们存在某些东西),从而后端保存userA有fileB?
我的意思:
也许我忽略了一些东西,但除了(我认为)hacky之外我找不到任何在线解决方案(设置密钥以用户名开头......)。
我不能发布两个以上的链接,因此遗漏了一些aws文档。