亚马逊预签名网址,只允许某些文件类型?

时间:2016-04-19 03:05:22

标签: php mysql amazon-web-services amazon-s3

我需要在社交网络类型的服务中使用s3来存储来自用户的内容并管理访问权限。

到目前为止,这是我想到的:

  1. 客户告诉LAMP服务器他想上传文件
  2. LAMP进行身份验证,并为用户可以上传的s3生成预先签名的URL。它还使用私钥创建该密钥的加密版本。然后它添加了这个键,以及在mysql表中启动它的用户(以及它何时启动)
  3. LAMP然后将密钥和数字签名从2.发送给客户。
  4. 客户端然后将文件上传到s3
  5. 完成后,他告诉LAMP该文件已完成。它发送密钥和数字签名。
  6. LAMP确保密钥和签名匹配。如果他们这样做,LAMP知道客户对于给予他的密钥是诚实的(并且他没有随机生成密钥)
  7. LAMP然后检查s3以确保具有该密钥的文件存在,如果存在,则删除在2中添加的行。
  8. 我的问题是:

    • 上述数据流是否存在严重缺陷,效率低下?
    • 如何确保只允许用户上传有效文件(如png,jpg,pdf等)。我相信只是检查扩展名是不够的,因为它可能会被更改

2 个答案:

答案 0 :(得分:0)

我不会让您的客户直接上传到S3。我会将文件上传到您的服务器,您可以在其中对其进行验证(并且您正确,a file extension check is not sufficient)。然后,一旦验证了文件,请自行将文件发送到S3。这样您就不会放弃对流程的任何控制。

答案 1 :(得分:0)

不要重新发明轮子。查看精细上传器或类似的东西,做你想要的。他们还会记录您可以模拟的流程,即使您想要实现自己的流程(但精细上传工作效果很好,在某些情况下相当便宜甚至免费)。

相关问题