2017-08-07 54 views
1

我们使用S3进行图片上传。我们批准上传到我们网站的所有图片。该过程如下:亚马逊S3:不允许客户端修改已上传的图片吗?

  1. 客户端在给定路径上从JavaScript上载图像到S3上。 (使用令牌)
  2. 有一次,我们从S3取回网址,我们在数据库中用照片表中的'isApproved flag false'保存了S3路径。
  3. 一旦通过我们的主管批准图像,图像就开始在我们的网站上显示。

问题是用户可能会通过生成的令牌在批准过程后更改图像(对某些淫秽图像)。我们能以某种方式阻止用户像这样修改图像吗?

一个临时修复方法是缩短令牌生存时间间隔,即5分钟,并仅在该间隔后批准图像。

我看到this但没有帮助,因为版本控制也取代了已经上传的图像,并将之前上传的图像移动到了新版本的路径。

任何更好的解决方案?

+4

您可以将批准的图像移动到具有不同权限集的其他存储桶(或文件夹)(只读访问)。 –

+1

扩展@ KhalidT。的评论,似乎你不应该让用户将对象写入最终发布的路径。当你“批准”他们时你应该这样做。 –

回答

1

您应该为上传的图像创建一个工作流程。这一过程将是:

  • 客户端上传图像
  • 这会触发一个Amazon S3事件通知给你/你的系统
  • 如果您批准的形象,将其移动到提供公共水桶您内容
  • 如果您不同意的图像,将其删除

这个目标可以使用AWS lambda函数来更新数据库,并标记照片的批准是一个自动化的过程,或者它可以做手工在通过亚马逊SNS收到电子邮件通知后。这个选择由你。

这种方法的好处是一旦批准任何东西都不能被替代。

+0

一个问题 - 我们有两类图像,1.任何网站用户都可以上传,2.其他类别的图像是内部上传。我们只需要为用户上传的图像执行审批流程。我怎样才能做到这一点? – maverick

+0

“如果您批准图片,请将其移动到为您的内容提供服务的公共存储区”..我们只有一个存储区,并且该存储区中的图片可以创建/编辑/删除 – maverick

+0

然后将其移至其他目录。否则,未经批准的上传将覆盖批准的上传。您可以设置权限,以便客户端只能上传到“上传目录”,一旦获得批准,您就可以将其移至“公共目录”。 –