2016-03-12 27 views
0

假设此场景: 我正在构建可与用户上传到我的AWS S3帐户的服务。 使用我的服务的每个站点都必须有上传表单,它可以直接上传到S3。为了做到这一点,每个站点都必须使用AWS签名版本4对其上传表单进行签名。 问题是签名需要AWSAccessKeyId和AWSSecretAccessKey,我必须将其分享给我的服务用户,这是不可接受的。 我以为我可以在我身边生成所有需要的签名数据,并在用户(网站)要求时提供该数据。向第三方服务请求获取令牌是否是不好的做法?

所以问题是:是一个不好的想法,以签署上传表单网站(这将上传文件到我的S3)不得不向我的服务器请求数据签名(XHR或服务器端)?

回答

0

我不完全确定你在问什么,但是如果你问是否代表单个网站自己签署上传是一个坏主意,那么答案不会是......警告。

签名上传(实际上,您只需签署上传URL)的安全风险要远远低于为其他域提供您的访问密钥。这就是它的目的,允许匿名上传。对请求进行签名仅给予站点/用户上传权限,但不会考虑谁正在上传或正在上传的内容。

这是您自己的安全检查需要进入的地方。如果表单托管在多个域中(全部上传到您的S3存储桶),您应该首先检查表单源自的域,以避免有人把在他们自己的网络服务器上创建并尝试上传内容。根据你的不同网站的配置方式,有几种方法可以做到这一点,不幸的是我不是专家。

其次,您需要验证上传的数据。它是纯文本,二进制文件等?您需要在启动上传之前验证所有这些。

我希望这会有所帮助。

相关问题