如何在浏览器的“网络”标签中隐藏Firebase Storage下载URL?

时间:2019-03-14 04:35:21

标签: firebase google-api firebase-authentication firebase-storage

我正在利用Firebase身份验证从Firebase存储下载图像。我还利用Google API HTTP引荐来源网址对域进行阻止,以便仅从我的网站访问Firebase存储中的图像。但是,当我转到浏览器的“网络”选项卡时,我可以看到图像的下载URL。这样,任何人都可以下载我的图像并使用它。我该怎么做才能保护我的图像?

P.S:在执行下面的代码

时,我正在使用firebase存储SDK并遵循文档
storageRef.child('images/stars.jpg').getDownloadURL().then(function(url) {
  // `url` is the download URL for 'images/stars.jpg'
  var img = document.getElementById('myimg');
  img.src = url;
}).catch(function(error) {
  // Handle any errors
});

我可以在浏览器的“网络”标签中看到下载URL。

3 个答案:

答案 0 :(得分:0)

不能。当您以任何方式将对Cloud Storage下载URL的访问权限放弃给任何人时,您就隐含地信任该用户对其的访问。他们可以自由地与任何人分享它。如果您不信任该用户,则不要给他们提供URL。

如果您不喜欢这种方式,请不要使用下载URL,而只能通过Firebase SDK安全下载。届时,您将信任用户,他们不会获取内容并将其上传到其他位置并生成指向该URL的URL。

答案 1 :(得分:0)

据我所知,您似乎有两个选择。不幸的是,它们实际上是有效的一对一,因为您可能必须同时实现两者。

第一个选择是撤销您不想被允许下载的单个文件上的访问令牌。不幸的是,这也意味着您无法通过URL在当前执行的任何位置显示它们,因为它会断开该链接。 See this answer for why that is a pain to do.

第二个选项是使用存储引用从客户端下载它们,但这仅在您在Web应用程序中使用Firebase SDK而不是在简单的静态网站中使用时才有效。我认为,如果该应用程序设置正确,则不应在浏览器的“网络”标签上显示该网址。

您可以在不使用第一个选项的情况下实现第二个选项,并且不应公开URL,但是如果您实现第一个选项,则不能再使用url,并且必须同时使用这两个选项...:/ meh .. Firebase很棒,但没有完美的东西

答案 2 :(得分:0)

这似乎可行,如果不行,我会更新

编辑:“但是,CORS配置仅适用于XML API请求,”该请求可以直接转到文件。.https://cloud.google.com/storage/docs/cross-origin

  1. GCP控制台>_
  2. 铅笔图标>创建cors.json [{"origin":["https://yourorigin1.com"],"method":["GET"],"maxAgeSeconds":3600}]
  3. 返回shell并输入gsutil cors set cors.json gs://yourproject1.appspot.com

https://stackoverflow.com/a/58613527/11711280

解决方法:

我将使所有规则成为resource.data.authorId,resource.data.members等。我需要匹配request.auth.uid(或将客户端代码中的控件调用与非匿名uid进行匹配)并登录首先,每个用户都是匿名的。然后,使用从我们的域初始化的Firebase时,uid不会为空