【问题标题】:Should I be uploading to Google Cloud Storage directly from an Android App?我应该直接从 Android 应用上传到 Google Cloud Storage 吗?
【发布时间】:2017-03-20 23:01:01
【问题描述】:

这是一个安全问题。

我有一个 Android 应用程序,允许用户将他们的私有图像上传到我的 Google Cloud Storage 存储桶。我有两个选择:

  1. 将图像数据发送到我的服务器,然后由我处理上传。

  2. 直接通过客户端(Android 应用)执行上传。

在我的例子中,这些文件需要公开可见(以允许用户分享他们上传的内容),所以我使用模糊的随机生成的 URL 来确保没有人偶然发现私人图像。

我想不出任何办法让第二种方法安全,因为:

  • 我需要嵌入我的 应用内的 API 访问凭证,这是不可能安全地进行的。

  • 如果有人拿到了我的凭据,他们可以列出 桶的内容并发现每个人的文件。这将是 太可怕了!

  • Google Cloud 上没有适用于 Android 的工作示例 平台文档还建议 Google 不支持 客户端方法。 (有一个通用的 Java 解决方案,但它不会 在 Android 上开箱即用)。

尽管有这些缺点,但我知道很多人都有 选择了客户端上传方式。我想知道有没有人这样做过 请解释一下他们是如何避免上述安全问题的?

【问题讨论】:

    标签: android security google-cloud-storage


    【解决方案1】:

    涉及客户直接上传数据的最安全的选择是让您的服务器生成签名 URL,并在用户想要上传内容时将其出售给用户。服务器将选择一个唯一的对象名称,生成一个用于上传对象的 URL,然后使用有权写入该存储桶的服务帐户对该 URL 进行签名。大概您有某种机制来验证您的应用程序的用户,并且您只会将签名的 URL 出售给通过您正在使用的任何当前检查的用户。

    这种方法的缺点是增加了实现签名 URL 售卖服务的复杂性,并且要求客户发出两个请求而不是一个请求。好处是让您的服务器能够近乎完美地控制客户可能会做什么。

    请注意,对于上传的签名 URL,您有两个选项:regular signed URLsigned "policy document",这让调用者在可接受的上传类型上有更多的余地。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-01-28
      • 1970-01-01
      • 2017-01-16
      • 2021-05-30
      • 2014-02-21
      • 2014-01-29
      • 1970-01-01
      • 2014-03-28
      相关资源
      最近更新 更多