0

我直接从浏览器执行分段上传到 S3,即绕过我的后端。

我的 JS 代码向 S3 发送握手请求(POST),然后以 5MB 的块(每个 PUT)上传文件,最终完成文件(POST)。

效果很好。您可以猜到,对 S3 的每个请求(握手、部分上传和最终确定)都必须签名。在 JS 中生成签名当然是不可能的,因为它会暴露我的 AWS 密钥。

到目前为止,我正在做的事情如下:在向 S3 发出每个请求之前,我向我自己的后端 (to /sign?method=HTTPMethod&path=URLToSign) 发送一个请求,该后端返回签名字符串。这样,所有 AWS 凭证都应该保留在后端。

我的问题如下:这安全吗?

4

1 回答 1

0

您应该考虑的一件事是,任何看到您调用以获取签名字符串的地址的人都可能滥用它代表您/您的应用程序上传任何文件(和任意数量的文件)。

为避免这种情况,我的第一个猜测是在后端实现某种验证,例如,如果每秒收到超过 X 个请求,则不会对 URL 进行签名。

此外,如果您需要过滤掉一些文件(exe,可能会增加您的 AWS 账单的大文件),我认为绕过您的后端不是一个好主意,因为您无法控制上传哪些文件(也许您的用户上传一个名为的文件kitten.png,它实际上是一个 700 mb 的 iso 文件)

于 2013-03-06T11:52:41.397 回答