firebase 存储规则不起作用
firebase storage rule doesn't work
我正在使用默认存储规则:
match /{allPaths=**} {
allow read, write: if request.auth != null;
}
或
match /{allPaths=**} {
allow read: if request.auth != null;
allow write: if request.auth != null;
}
但无需登录,下载 url 仍可访问。如何预防? https://firebasestorage.googleapis.com/v0/b/sunshine-b9c43.appspot.com/o/user_icon%2FcwL09fN6x5fnaYBTbEXAHJ3rgxV2_1473299432313.jpg?alt=media&token=042803b7-a4f0-4728-9041-81e6d4b3eb1d
当您将数据上传到 Firebase 存储时,您将获得两个 'links' 来获取该数据:
- 私人 link. 这个 link 只能访问
内部通过认证 users/devices.
- public link. 这个 link 技术上任何人都可以阅读
link,然而,link 应该是高度
不可猜测。最后的令牌很难猜到。
如果您删除此标记并导航到 link,您将看到
Firebase 服务器阻止您的访问。
如果您对让 link 仍然 'out there' 让全世界看到感到不舒服,您可以撤销 link。
见下图。我截图给你看私人'gc//'link和public'http'link。看到那个 'revoke' 选项了吗?如果您有不希望用户查看的特别敏感数据,则可以使用它。
更新:
似乎在撰写本文时,Firebase flag/function 中没有 API 调用或构建来摆脱那个 public link;唯一的方法是通过 FB 控制台一次一个地手动撤销它们。 (ref: https://groups.google.com/forum/#!topic/firebase-talk/aw86jf8b7PY) Mike Mcdonald 还注意到这样一个事实,即一旦用户已经看到图像,他们总是有可能下载或保存它,所以撤销 URL 可能或无论如何可能没有任何真正的安全影响。
然而,想到的另一个选择是将图像拉到您的服务器并使用临时(一次性?)从那里托管它们 link 来提供图像,保持 public URL 只为你的眼睛。这会在服务器端增加更多工作,但如果您绝对需要安全性,它可能是您想要探索的一个选项。
希望对您有所帮助。
由于来自 firebase 控制台的令牌,每个人都可以访问此 link:
https://firebasestorage.googleapis.com/v0/b/fb-functions-xxx.appspot.com/o/assets%2Fhello.html?alt=media&token=xxxxxx-95d5-41cd-b827-329bbe6269fb
如果令牌已从 link 中删除,将应用 firebase 存储规则。
https://firebasestorage.googleapis.com/v0/b/fb-functions-xxx.appspot.com/o/assets%2Fhello.html?alt=media
我正在使用默认存储规则:
match /{allPaths=**} {
allow read, write: if request.auth != null;
}
或
match /{allPaths=**} {
allow read: if request.auth != null;
allow write: if request.auth != null;
}
但无需登录,下载 url 仍可访问。如何预防? https://firebasestorage.googleapis.com/v0/b/sunshine-b9c43.appspot.com/o/user_icon%2FcwL09fN6x5fnaYBTbEXAHJ3rgxV2_1473299432313.jpg?alt=media&token=042803b7-a4f0-4728-9041-81e6d4b3eb1d
当您将数据上传到 Firebase 存储时,您将获得两个 'links' 来获取该数据:
- 私人 link. 这个 link 只能访问 内部通过认证 users/devices.
- public link. 这个 link 技术上任何人都可以阅读 link,然而,link 应该是高度 不可猜测。最后的令牌很难猜到。 如果您删除此标记并导航到 link,您将看到 Firebase 服务器阻止您的访问。
如果您对让 link 仍然 'out there' 让全世界看到感到不舒服,您可以撤销 link。
见下图。我截图给你看私人'gc//'link和public'http'link。看到那个 'revoke' 选项了吗?如果您有不希望用户查看的特别敏感数据,则可以使用它。
更新: 似乎在撰写本文时,Firebase flag/function 中没有 API 调用或构建来摆脱那个 public link;唯一的方法是通过 FB 控制台一次一个地手动撤销它们。 (ref: https://groups.google.com/forum/#!topic/firebase-talk/aw86jf8b7PY) Mike Mcdonald 还注意到这样一个事实,即一旦用户已经看到图像,他们总是有可能下载或保存它,所以撤销 URL 可能或无论如何可能没有任何真正的安全影响。
然而,想到的另一个选择是将图像拉到您的服务器并使用临时(一次性?)从那里托管它们 link 来提供图像,保持 public URL 只为你的眼睛。这会在服务器端增加更多工作,但如果您绝对需要安全性,它可能是您想要探索的一个选项。
希望对您有所帮助。
由于来自 firebase 控制台的令牌,每个人都可以访问此 link:
https://firebasestorage.googleapis.com/v0/b/fb-functions-xxx.appspot.com/o/assets%2Fhello.html?alt=media&token=xxxxxx-95d5-41cd-b827-329bbe6269fb
如果令牌已从 link 中删除,将应用 firebase 存储规则。
https://firebasestorage.googleapis.com/v0/b/fb-functions-xxx.appspot.com/o/assets%2Fhello.html?alt=media