【问题标题】:Store User Profile Pictures Securely on AWS S3在 AWS S3 上安全地存储用户个人资料图片
【发布时间】:2016-12-18 22:16:16
【问题描述】:

我正在开发一个小型多人游戏应用程序,它要求用户拥有个人资料并允许他们拥有个人资料图片。

游戏服务器将托管在 AWS EC2 上,我计划将 DynamoDB 与额外的 Redis 缓存一起用作数据库。要存储个人资料图片,我想使用 S3。

S3 服务器将可以直接从应用程序访问,因为我不想通过我的游戏服务器路由所有流量。现在我需要创建一种安全的方式让用户 起来并下载个人资料图片。每个用户都可以上传他的头像,但不是所有其他用户都可以下载。

上传应该不是问题,因为我可以使用我的游戏服务器签署上传链接。

我更关心的是下载。游戏中有“好友系统” 并且只有您的朋友可以看到您的头像。现在我想了几种方法来安全地存储这些图片以确保我的用户的隐私。

  1. 对 url 做一些事情: 所以这个的基本思想是,我将给我们一个攻击者很难猜到的 url。 http://s3-aws-region.amazonaws.com/profilpictures/[userid+random128bit] 但我不知道这是否足够。也许如果有更多的随机位?

  2. 加密图片: 只需加密图像。我会使用带有 128 位密钥的 AES,该密钥对于每张图片都不同,并在用户设备上生成。服务器将存储密钥并仅将其提供给正确的人。 作为 url,我可以使用 http://s3-aws-region.amazonaws.com/profilpictures/userid 使 url 可计算。缺点:攻击者可以计算 url 并获取加密图片。有问题吗?

  3. 两者都做: 为我的用户保证大部分隐私的方法只是上述两者的结合。但这足够了吗?或者甚至太多?

那么您如何看待这些方法?有什么我没有想到的吗?

【问题讨论】:

    标签: security amazon-web-services amazon-s3


    【解决方案1】:

    不要使事情过于复杂。只需将签名的 URL 发送给应该看到图片的用户即可。

    http://docs.aws.amazon.com/AmazonS3/latest/dev/ShareObjectPreSignedURL.html

    【讨论】:

    • 戴上建筑师的帽子,S3 签名 URL 似乎是一个不错的选择,但从移动应用程序开发人员的角度来看,使用签名 URL 管理缓存和图像渲染是一件痛苦的事情。由于 S3 端涉及的加密/解密,我遇到了很多使用签名 URL 渲染图像的性能问题,虽然非常小,但它成为媒体重的移动应用程序的主要问题。
    • @AnBisw 那么你有什么建议呢?我现在面临同样的问题。一方面,我想严格遵守最佳实践,加密我的数据库,并仅向用户显示图像,因此链接将无法通过世界访问,或者至少在几秒钟内无法访问,并且不是公共存储桶。因此,每次我用他们的头像来查看用户列表时,我都会创建预签名的 url,但这样做似乎有点矫枉过正。你怎么看?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-05-02
    • 2011-06-28
    • 2013-03-24
    • 1970-01-01
    • 2014-12-20
    • 1970-01-01
    相关资源
    最近更新 更多