忽略 Firebase 存储安全读取规则
Firebase Storage security read rule ignored
我在尝试为 Android 应用编写 Firebase 存储安全规则时遇到了一些意外行为。
为了测试一个简单的案例,我写了以下规则:
service firebase.storage {
match /b/<my-firebase-storage-bucket>/o {
match /{allPaths=**} {
allow read: if request.auth.uid == "mystery";
allow write: if request.auth.uid == "6EP13cYABCciskhKwMTaXYZHS5g1";
}
}
}
结果是,如果我使用授权写入 uid“6EP13cYABCciskhKwMTaXYZHS5g1”登录我的应用程序,我只能上传文件,但无论我使用哪个 uid 登录,我仍然可以读取文件。所以看起来只有写规则是有效的;读取规则被忽略。
为了进一步测试,我将规则重写为:
service firebase.storage {
match /b/<my-firebase-storage-bucket>/o {
match /{allPaths=**} {
allow read: if false;
allow write: if true;
}
}
}
这允许我在登录到我的应用程序时上传和读取文件:再次似乎只有写入规则有效。
谁能想到一个可能的解释?
您在问题下的评论中解释说您使用 getDownloadUrl() 来获取文件的 URL。然后你将 URL 传递给 Glide,它会读取文件。 getDownloadUrl()
的文档指出 URL 可用于共享文件:
Asynchronously retrieves a long lived download URL with a revokable
token. This can be used to share the file with others, but can be
revoked by a developer in the Firebase Console if desired.
这对我来说表明 URL 实际上是文件的“可共享 link”,当 URL 用于时,Firebase 存储中定义的安全规则不适用访问文件。人们可以想到许多不可能应用规则的情况。例如,当在 Glide 请求中使用 URL 时,该请求不包含有关请求者登录 UID 的信息,它仅包含 URL.
如果您想通过 URL 限制对文件的访问,我认为您只能通过限制对 URL 本身的访问来实现。
我在尝试为 Android 应用编写 Firebase 存储安全规则时遇到了一些意外行为。
为了测试一个简单的案例,我写了以下规则:
service firebase.storage {
match /b/<my-firebase-storage-bucket>/o {
match /{allPaths=**} {
allow read: if request.auth.uid == "mystery";
allow write: if request.auth.uid == "6EP13cYABCciskhKwMTaXYZHS5g1";
}
}
}
结果是,如果我使用授权写入 uid“6EP13cYABCciskhKwMTaXYZHS5g1”登录我的应用程序,我只能上传文件,但无论我使用哪个 uid 登录,我仍然可以读取文件。所以看起来只有写规则是有效的;读取规则被忽略。
为了进一步测试,我将规则重写为:
service firebase.storage {
match /b/<my-firebase-storage-bucket>/o {
match /{allPaths=**} {
allow read: if false;
allow write: if true;
}
}
}
这允许我在登录到我的应用程序时上传和读取文件:再次似乎只有写入规则有效。
谁能想到一个可能的解释?
您在问题下的评论中解释说您使用 getDownloadUrl() 来获取文件的 URL。然后你将 URL 传递给 Glide,它会读取文件。 getDownloadUrl()
的文档指出 URL 可用于共享文件:
Asynchronously retrieves a long lived download URL with a revokable token. This can be used to share the file with others, but can be revoked by a developer in the Firebase Console if desired.
这对我来说表明 URL 实际上是文件的“可共享 link”,当 URL 用于时,Firebase 存储中定义的安全规则不适用访问文件。人们可以想到许多不可能应用规则的情况。例如,当在 Glide 请求中使用 URL 时,该请求不包含有关请求者登录 UID 的信息,它仅包含 URL.
如果您想通过 URL 限制对文件的访问,我认为您只能通过限制对 URL 本身的访问来实现。