firebase存储规则不适用于';行不通

firebase存储规则不适用于';行不通,firebase,google-api,firebase-storage,Firebase,Google Api,Firebase Storage,我正在使用默认存储规则: match /{allPaths=**} { allow read, write: if request.auth != null; } 或 但没有登录,下载url仍然可以访问。如何预防 当您将数据上传到Firebase存储时,系统将为您提供两个“链接”以获取该数据: 专用链接。只能访问此链接 由经过身份验证的用户/设备进行内部验证 公共链接。此链接在技术上任何人都可以阅读 然而,有了这个链接,这个链接应该是高度敏感的 不可猜测。最后的标记将非常难以猜测。 如果删

我正在使用默认存储规则:

match /{allPaths=**} {
  allow read, write: if request.auth != null;
}


但没有登录,下载url仍然可以访问。如何预防

当您将数据上传到Firebase存储时,系统将为您提供两个“链接”以获取该数据:

  • 专用链接。只能访问此链接 由经过身份验证的用户/设备进行内部验证
  • 公共链接。此链接在技术上任何人都可以阅读 然而,有了这个链接,这个链接应该是高度敏感的 不可猜测。最后的标记将非常难以猜测。 如果删除此令牌并导航到链接,您将看到 Firebase服务器阻止您的访问
  • 如果你对这个链接仍然“在外面”让全世界看到感到不舒服,你可以撤销这个链接

    见下图。我拍摄了一张截图,向您展示了私有的“gc/”链接和公共的“http”链接。看到那个小小的“撤销”选项了吗?如果您有不希望用户查看的特定敏感数据,则可以使用该选项

    更新: 在撰写本文时,似乎没有API调用或内置Firebase标志/函数来摆脱该公共链接;唯一的方法是通过FB控制台手动撤销它们,一次撤销一个。(参考:)Mike Mcdonald还注意到一个事实,即一旦用户已经看到该图像,他们总是有可能以任何方式下载或保存该图像,因此撤销URL可能会也可能不会产生任何真正的安全影响

    然而,我想到的另一个选择是,将图像拉到服务器上,然后使用临时(一次性?)链接从那里托管它们,为图像提供服务,并将该公共URL仅用于您的眼睛。这在服务器端增加了更多的工作,但是如果您确实需要安全性,这可能是您想要探索的一个选项


    希望这有帮助。

    由于firebase控制台的令牌,每个人都可以访问此链接:

    如果令牌已从链接中删除,则将应用firebase存储规则。

    谢谢你,瑞安。getDownloadURL()函数将为我提供公共URL,非常易于使用,但它是公共URL,每个人都可以从标记中获取它并绕过登录保护。现在,我的问题是如何为我的web应用程序使用私有URL?有什么例子吗?我重新阅读后编辑了这条评论,因为我没有看到关于web应用的最后一部分。这些图像是否仅显示给已通过您的webapp验证的用户(与Firebase Auth分开)?另外,如果您不介意我问的话,您的web应用程序使用什么类型的堆栈/框架?我正在使用Firebase Auth和Angular 2进行web应用程序,我只希望在经过身份验证的用户之间共享图像。移动客户端正在使用Ionic 2,这应该可以,因为从应用程序获取图像URL并不容易。:)还想知道是否有任何API可以撤销下载URL,而不是手动撤销?抱歉,弗兰克,我这周被耽搁了。看看这个简短的论坛帖子,看看你想做什么。这应该会对这个问题有一点启发。看起来Firebase还没有一个很好的方法来做这件事,至少对web来说不是。嗨,Ryan,谢谢你的回复。我在谷歌论坛上发布了我的建议(使用当前用户会话,而不是生成下载URL的永久令牌)。希望这种功能很快可以使用。
    match /{allPaths=**} {
      allow read: if request.auth != null;
      allow write: if request.auth != null;
    }