我正在开发一款小型多人游戏应用程序,要求用户拥有个人资料并允许他们拥有个人资料照片。
游戏服务器将托管在AWS EC2上,作为数据库,我计划将DynamoDB与其他Redis缓存一起使用。要存储个人资料图片,我想使用S3。
S3服务器可直接从应用程序访问,因为我不想通过我的游戏服务器路由所有流量。现在我需要创建一种让用户安全的方式 和下载个人资料图片。允许每个用户上传他的个人资料图片,但不是每个其他用户都可以下载它。
上传不应该是一个问题,因为我可以使用我的游戏服务器签署链接进行上传。
我更关心的是下载。游戏中有一个“朋友系统” 只有你的朋友才能看到你的个人资料照片。现在我有几种方法可以安全地存储这些图片,以确保我的用户的隐私。
使用网址做一些事情: 因此,基本的想法是,我将为我们提供一个难以猜测攻击者的网址。 http://s3-aws-region.amazonaws.com/profilpictures/[userid+random 128位] 但我不知道这是否足够。也许如果有更多的随机位?
加密图片: 只需加密图像。我会使用带有128位密钥的AES,这对于每张图片都是不同的,并且在用户设备上生成。服务器将存储密钥并仅将其提供给合适的人员。 作为网址,我可以使用http://s3-aws-region.amazonaws.com/profilpictures/userid使网址可以计算的内容。缺点:攻击者可以计算网址并获取加密图片。这是一个问题吗?
同时执行以下操作: 保证我的用户最隐私的方法只是上述两者的组合。但这够了吗?或者甚至可能太多了?
那你怎么看待这些方法呢?有什么我没想到的吗?
答案 0 :(得分:1)
不要过度复杂化。只需将签名的网址发送给应该看到图片的用户。
http://docs.aws.amazon.com/AmazonS3/latest/dev/ShareObjectPreSignedURL.html