【问题标题】:Amazon pre signed url, allow only certain file types?亚马逊预签名网址,只允许某些文件类型?
【发布时间】:2016-04-19 03:05:21
【问题描述】:

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

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

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

我的问题是:

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

【问题讨论】:

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


    【解决方案1】:

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

    【讨论】:

    • 我正在直接上传,因为这样可以节省 2 倍的带宽。我不必将文件下载到服务器然后也将其上传到 s3。
    • @harvey_slash 除非它们很大,否则我不会这样做
    • 数据传输到 EC2 是免费的。从 EC2 到 S3 的数据传输(如果它们在同一区域内)也是免费的。此外,从 EC2 到 S3 的数据传输速度非常快。
    • @Machavity,如果用户发送的文件类型不正确,我是否应该打扰?我的意思是,由于它都托管在静态存储库中,是否有任何机会或恶意意图成功?如果是的话,你能告诉我一个例子吗?
    • @harvey_slash 对于图像,常见的攻击向量是发送导致缓冲区溢出的图像。首先验证图像可以防止这种情况发生,因为图像会显得无效
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-11-26
    相关资源
    最近更新 更多