Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/security/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ssl/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 通过HTTP返回AWS签名_Javascript_Security_Amazon S3 - Fatal编程技术网

Javascript 通过HTTP返回AWS签名

Javascript 通过HTTP返回AWS签名,javascript,security,amazon-s3,Javascript,Security,Amazon S3,我直接从浏览器执行到S3的多部分上传,即绕过后端 我的JS代码向S3发送一个握手请求(POST),然后以5MB的块(每个块一个PUT)上传文件,最后完成文件(POST) 这很有效。正如您所猜测的,每个S3请求(握手、部分上传和定稿)都必须签名。当然,在JS中生成签名是不可能的,因为它会暴露我的AWS密钥 到目前为止,我所做的是:在向S3发送每个请求之前,我向自己的后端发送一个请求(到/sign?method=HTTPMethod&path=URLToSign),该后端返回签名字符串。这样,所有A

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

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

这很有效。正如您所猜测的,每个S3请求(握手、部分上传和定稿)都必须签名。当然,在JS中生成签名是不可能的,因为它会暴露我的AWS密钥

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


我的问题是:这安全吗?您应该考虑的一件事是,任何人看到您正在呼叫的地址以获取签名字符串,都可能滥用它来代表您/您的应用程序上载任何文件(以及任何数量的文件)

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


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

很好,我没想到这件事,真傻。我还可以过滤请求的推荐人。请求应该来自我自己的域。关于绕过后端,我有点不得不这样做,因为Heroku在请求上有很短的超时时间,所以大文件上传是不可能的。@EmmanuelTurlay这一切都取决于您对用户(企业内部网用户,整个互联网?)的信任程度,以及您可以在(I)开发和(ii)维护/监视方面付出多少努力。检查referer会过滤掉像“scriptkiddies”那样的轻微攻击,但严重的攻击可能涉及对referer的欺骗,因为此字段由客户端发送。你也可以问security.stackexchange.com,我也可以确保请求是XHR。浏览器禁止跨域XHR,而curl样式的查询将无法满足XHR要求。