为什么即使有规则,我仍然可以通过浏览器打开存储在 Firebase 存储中的图片?



所以我有这样的安全规则:

service firebase.storage {
match /b/{bucket}/o {
match /eventPoster/{imageID} {
allow read: if isSignedIn()
allow create: if isSignedIn() && isImage() && lessThanNMegabytes(0.5)
}

function isSignedIn() {
return request.auth != null;
}
function isBelongTo(userId) {
return request.auth.uid == userId;
}
function lessThanNMegabytes(n) {
return request.resource.size < n * 1024 * 1024;
}
function isImage() {
return request.resource.contentType.matches('image/.*');
}
}
}

如您所见,我仅设置了可以看到/读取图像的登录用户。 但是如果我将文件的链接复制并粘贴到存储中,如下所示在隐身浏览器中,我仍然可以看到我的图像

https://firebasestorage.googleapis.com/v0/b/XXXXXXX.appspot.com/o/eventPoster%2F0050370e-a226-4a69-a635-ceccce10007c?alt=media&token=44f6d5a4-ff44-4376-3c7b9dfac465

我希望我无法通过浏览器看到图像,我使用谷歌浏览器对其进行测试。 即使我的应用程序适用于Android和iOS,仅用于测试,我也使用浏览器。我假设,如果我通过浏览器访问它,我没有登录

您在那里共享的 URL 是下载 URL。无论安全规则如何,该 URL 都是可公开读取的。阻止其工作的唯一方法是从 Firebase 控制台撤销其令牌。

如果您希望 Firebase 存储中的文件只能根据其安全规则进行访问,请不要为其生成下载网址,或者至少不要与任何人共享下载网址。

最新更新