【发布时间】:2021-01-03 01:32:33
【问题描述】:
我正在为连接到前端的应用程序使用火基存储。 我目前仅存储桶文件夹的存储规则是:
match {groupID}/{userId}/{image} {
allow read: if isValidProvider() && request.auth.token.groupId == groupID && request.auth.uid == userId;
allow write: if isValidProvider() && request.auth.uid == userId && request.auth.token.groupId== groupID && isImageValid() && isValidImageExtension(image);
}
}
功能如下:
function isImageValid(){
return (request.resource.contentType.matches('image/png') ||
request.resource.contentType.matches('image/jpg') ||
request.resource.contentType.matches('image/jpeg') ||
request.resource.contentType.matches('image/webp') ||
request.resource.contentType.matches('image/gif'));
}
function isValidImageExtension(image) {
return (image.matches('.*[.]png') ||
image.matches('.*[.]jpeg') ||
image.matches('.*[.]jpg') ||
image.matches('.*[.]webp')||
image.matches('.*[.]gif'));
}
我的意图是基于 groupID 的读取权限和基于用户 ID 的写入权限。 此外,在文件夹中 - 它应该只接受格式为 - png/jpeg/jpg/webp/gif 的图像
但是,在尝试通过邮递员进行测试时 - 我可以添加 ndjson 文件或 .py 文件。 例如 - API 调用以 -test.jpg 结尾,但在正文 - 二进制文件中,我添加了一个 .py 文件。 此外,在存储中,.py 保存为类型 - image/jpg。
这正在被添加到存储中。
如何限制只从后端添加图片文件?
【问题讨论】:
-
实现此目的的最佳方法是在将文件放入 Firebase 存储之前进行后端文件类型验证。为什么要使用 firebase 规则来处理这个问题?
-
我们一直计划使用后端文件验证 - 但想了解是否可以通过规则实现相同的目标。那将是一个快速的解决方案。否则,后端验证将需要大量架构更改。
-
您能否编辑您的问题以显示您如何上传文件?
-
嗨 @FrankvanPuffelen 我的 API 调用类似于 - https://$API_URL2%2Ftest.jpg 然后在正文中 - 我转到二进制文件并添加 .py 文件。它给了我成功响应 200 OK。此外,我的存储桶中添加了相同的 py 文件。理想情况下,我希望被规则阻止。由于 contentType 验证。
标签: firebase security google-cloud-platform firebase-storage firebase-security