直接js浏览器上传到S3的主要安全问题是用户将在客户端存储他们的S3凭据。
为了降低此风险,S3 documentation建议使用由中间服务器生成的短期密钥:
这个流程的问题在于我看不出它对公共上传有什么帮助。
假设我的上传页面是公开的。这意味着生成短期密钥的服务器API端点也需要公开。然后恶意用户可以找到api端点的地址,并在每次想要上传内容时点击它。服务器无法知道请求是来自上传页面上的真实用户还是来自任何其他地方。
是的,我可以检查进入api的请求中的域名并验证它,但域名很容易被欺骗(当请求不是来自浏览器客户端时)。
整件事情是否令人担忧?主要风险是有人滥用我的S3帐户并向其上传内容。我还需要了解其他问题吗?这可以以某种方式减轻吗?
答案 0 :(得分:2)
假设我的上传页面是公开的。这意味着服务器 生成短期密钥的API端点需要公开为 好。然后恶意用户可以找到api的地址 端点并在每次想要上传内容时点击它。该 服务器无法知道请求是否来自真实用户 上传页面或任何其他地方。
如果这涉及到您,您将要求您的用户以某种方式登录您的网站,并在处理您的登录过程的同一服务器端身份验证服务后面提供API端点。然后,只有经过身份验证的用户才能上传文件。
您可能还想查看S3 pre-signed URLs。