Firebase存储安全规则

Firebase存储安全规则,firebase,security,google-cloud-platform,firebase-storage,firebase-security,Firebase,Security,Google Cloud Platform,Firebase Storage,Firebase Security,我正在为连接到前端的应用程序使用fire base存储。 我当前仅针对其中一个bucket文件夹的存储规则为: match {groupID}/{userId}/{image} { allow read: if isValidProvider() && request.auth.token.groupId == groupID && request.auth.uid == userId; allow write: if isVali

我正在为连接到前端的应用程序使用fire base存储。 我当前仅针对其中一个bucket文件夹的存储规则为:

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的图像

然而,在尝试通过postman测试时,我可以添加一个ndjson文件或.py文件。 例如,API调用以-test.jpg结束,但在body-binary中我添加了一个.py文件。 另外,在存储器中.py保存为type-image/jpg

这将被添加到存储中


如何限制仅从后端添加图像文件?

我找到了一种验证方法。这对您有帮助吗?

上的文档最清楚地说明了如何确定
contentType

putFile()
方法自动从文件扩展名推断MIME类型,但您可以通过在元数据中指定
contentType
来覆盖自动检测到的类型。如果您不提供
内容类型
,并且云存储无法从文件扩展名推断默认值,则云存储将使用
应用程序/octet流

因此Firebase不会查看文件的实际内容,以确定内容类型

相反,内容类型是从文件扩展名派生的,您可以通过在上载文件时在元数据中显式设置内容类型来覆盖该扩展名

由于不设置元数据,因此内容类型由文件名中的扩展名
.jpg
确定。Python内容不用于确定这一点



如果您想对内容类型进行更严格的检查,请考虑运行在上传上触发的云函数,并使用文件类型嗅探器查看文件的实际内容以验证类型。然后,如果文件内容与其类型不匹配,则可以删除该文件,或者例如,在元数据中添加一个

verified
属性,然后您可以签入客户端。

实现这一点的最佳方法是在将文件放入firebase存储之前进行后端文件类型验证。为什么您希望firebase规则处理此问题?我们一直计划使用后端端文件验证,但希望了解是否可以通过规则实现同样的验证。这将是一个快速解决方案。否则,后端验证将是一个很大的架构更改。您可以编辑您的问题以显示如何上载文件吗?Hi@FrankvanPuffelen我的API调用类似于-https://$API\u URL2%2Ftest.jpg,然后在body中-我转到binary并添加.py文件。它给了我成功的回答200 OK。此外,相同的py文件也添加到我的bucket中。理想情况下,我希望被规则阻止。因为contentType验证。这是针对实时数据库的-我们正在为firebase存储工作。我也发现了这一点。你能推荐一些文件类型嗅探器的例子吗?这是像clamAV还是其他什么?建议非现场图书馆是离题的,这就是为什么我没有包括任何。但是搜索应该给你合理的选择:嗨@Frankvanpuffelen-谢谢你的帮助。我不能早点查这个。