【问题标题】:Google App Engine - Uploading blobs and authenticationGoogle App Engine - 上传 Blob 和身份验证
【发布时间】:2010-04-27 20:10:27
【问题描述】:

(我尝试在 GAE 论坛上问这个问题,但没有得到答案,所以在这里尝试。)

目前为了上传 Blob,应用引擎的 Blob 存储服务会创建一个唯一的 用户可以向其发布 Blob 的时间 URL。我的要求是我只 希望经过身份验证/授权的用户在我的应用程序中发布 blob。如果包含用于上传 Blob 的多部分表单的页面在我的应用程序中,我目前可以实现这一点。

但是,我希望为我的用户提供“REST API”来上传他们的 Blob。虽然上传 URL 的一次性性质确实减少了恶意使用的机会,但仍有可能。

我想知道这里的应用引擎团队中是否有人可以考虑开发人员可以注册上传侦听器的功能。 (或者如果已经有办法,我会全力以赴)。一个标准的 servlet 过滤器也可以完成这项工作。这将使我们有机会在请求被转发到 blob 存储服务之前对请求进行身份验证/验证/装饰。

谢谢, 凯尔

【问题讨论】:

标签: java google-app-engine blobstore


【解决方案1】:

正如您所指出的,只有在您拥有有效的上传 URL 时才能上传 Blob,因此您只需向授权用户发出有效的上传 URL。未经授权的用户获得上传 URL 的唯一方法是授权用户将其提供给他们,或者它被拦截 - 在任何一种情况下,相同的警告都将适用于常规凭据。

无论如何,上传后仍然可以检查用户的凭据,此时如果您不满意,可以立即删除 blob。如果可以定期上传未经授权的 blob,这可能会导致拒绝服务漏洞,但由于我上面提到的分发编码 URL 的限制,这仅可能适用于,例如,用户的访问权限是在您为他们生成上传 URL 后撤销。

【讨论】:

  • 谢谢,尼克。我有点希望这不是答案,但我想我会接受它:) 正如你所提到的,是的,我只会将上传 URL 分发给经过身份验证的用户。但是,如果经过身份验证的用户自己是一个流氓用户,他会将为他生成的 URL 分发给其他人,那么我们就有问题了。正如你所提到的,我当然可以在后处理期间删除 blob,但我想看看是否可以在它保留在 blob 存储区之前拒绝它。
  • 如果经过身份验证的用户是“流氓”并将 URL 分发给其他人,您将如何确定他这样做了?他可以轻松地分发他的凭据或登录 cookie。
  • 是的,他可以分发他的凭据,但如果我可以验证上传 URL,则上传至少会以他的名义进行。今天,一旦他获得了上传 URL,他就可以匿名上传 Blob。
  • 没有理由必须如此 - 只需记录您提供给什么人的 URL。或者,当您分发 URL 时,也分发散列令牌,如果令牌无效,则拒绝接受上传。
【解决方案2】:

我不确定它是否会起作用(即 GAE 可能不会让你这样做),但是包装 /_ah/upload 模式的 servlet 过滤器可以首先检查 POST 是否来自与经过身份验证的客户端相同的 IP 地址.

【讨论】:

    【解决方案3】:

    现在,您可以使用 Blobstore API 上传文件,请在此处查看:http://code.google.com/appengine/docs/java/blobstore/overview.html

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-04-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-10-10
      • 1970-01-01
      • 2011-12-25
      相关资源
      最近更新 更多