我正在直接从浏览器执行分段上传到S3,即绕过我的后端。
我的JS代码向S3发送握手请求(POST),然后以5MB的块(每个PUT)上传文件,最终完成文件(POST)。
效果很好。您可以猜到,每次对S3的请求(握手,部分上传和最终确定)都必须签名。当然,在JS中生成签名是不可能的,因为它会暴露我的AWS密钥。
到目前为止我所做的是以下内容:在每次向S3发出请求之前,我向我自己的后端发送请求(到/sign?method=HTTPMethod&path=URLToSign
),返回签名字符串。这样,所有AWS凭证都保留在后端,应该是。
我的问题如下:这样安全吗?
答案 0 :(得分:0)
您应该考虑的一件事是,任何看到您要拨打的地址获取签名字符串的人都可以滥用它来代表您/您的应用程序上传任何文件(和任意数量的文件)。
为了避免这种情况,我的第一个猜测是在后端实现某种验证,例如,如果每秒获得超过X个请求,则不会签署URL。
另外,如果您需要过滤掉一些文件(exe文件,可能会增加您的AWS账单的巨大文件)我不认为绕过您的后端是一个好主意,因为您无法控制哪些文件上传(也许您的用户上传了一个名为kitten.png
的文件,实际上是一个700 MB的iso文件)