这是安全性问题。
我有一个Android应用,允许用户将其私有图片上传到我的Google云端存储分区。我有两个选择:
将图像数据发送到我的服务器,然后服务器将处理上传。
直接通过客户端(Android应用)执行上传。
在我的情况下,文件需要公开显示(以允许用户共享他们的上传),因此我使用模糊的随机生成的URL来确保没有人偶然发现私有图像。
我无法弄清楚如何使第二种方法安全,因为:
我需要嵌入我的 应用程序中的API访问凭据,这是不可能安全的。
如果有人拿到我的凭据,他们可以列出 桶的内容,发现每个人的文件。这将是 太可怕了!
Google Cloud上缺少Android的工作示例 平台文档还表明Google不支持 客户方法。 (有一个通用的Java解决方案,但它不会 在开箱即用的Android上工作。)
尽管存在所有这些缺点,但我知道很多人都有 选择了客户端上传方法。我想知道是否有人这样做过 请问他们如何避免上述安全问题?
答案 0 :(得分:0)
涉及客户直接上传数据的最安全选项是让您的服务器生成签名URL,并在用户上传内容时将其提供给用户。服务器将选择一个唯一的对象名称,生成一个用于上传对象的URL,然后使用有权写入该存储桶的服务帐户对该URL进行签名。据推测,您可以使用某种机制对应用程序的用户进行身份验证,并且只会向通过您正在使用的当前检查的用户提供已签名的URL。
这种方法的缺点是实施签名的URL自动售货服务增加了复杂性,并要求客户提出两个请求而不是一个。好处是让您的服务器能够近乎完美地控制客户的行为。
请注意,对于上传,您有两种签名网址选项:regular signed URL和signed "policy document",可让调用者在可接受的上传类型方面有更多余地。