了解面向 Cloud Storage 的 Firebase 安全规则

安全性通常是应用开发过程中最复杂的部分之一。在大多数应用中,开发者所构建和运行的服务器必须能够处理身份验证(用户是谁)和授权(用户可以做什么)这两大问题。 建立身份验证和授权机制本身就十分困难,要确保正确则更加困难,而这直接关系到您的产品能否取得成功。

Firebase Authentication 让您能够轻松验证用户身份,与之类似,面向 Cloud StorageFirebase Security Rules 安全规则可以为您简化向用户授权和验证请求的工作。Cloud Storage Security Rules 允许您指定基于路径的权限,降低了复杂性。只需几行代码,您就可以编写出授权规则,用于限定能够发出 Cloud Storage 请求的用户身份,或限制上传文件的大小。

Firebase Realtime Database 具有类似的功能,称为 Firebase Realtime Database Security Rules

身份验证

了解您的用户是谁,这是构建应用时需要考虑的一个重要方面,Firebase Authentication 提供了一种易于使用且安全的纯客户端侧身份验证解决方案。面向 Cloud StorageFirebase Security RulesFirebase Authentication 相结合,可以实现基于用户的安全性。当使用 Firebase Authentication 对某个用户进行了身份验证后,Cloud Storage Security Rules 中的 request.auth 变量会变成一个包含该用户唯一 ID (request.auth.uid) 和令牌 (request.auth.token) 中所有其他用户信息的对象。当用户未通过身份验证时,request.auth 则为 null。这可以让您针对每个用户安全地控制数据访问。如需了解详情,请参阅身份验证部分。

授权

识别用户只是保证安全的一部分。在知道用户的身份后,您需要一种方法来控制该用户对 Cloud Storage 中的文件的访问权限。

Cloud Storage 允许您指定基于文件和路径的授权规则(这些规则驻留在服务器上),以及确定对您应用中的文件的访问权限。例如,默认的 Cloud Storage Security Rules 安全规则需要借助 Firebase Authentication 才能对所有文件执行任何 readwrite 操作:

service firebase.storage {
  match /b/{bucket}/o {
    match /{allPaths=**} {
      allow read, write: if request.auth != null;
    }
  }
}

您可以前往 Firebase 控制台选择一个 Firebase 应用并查看“Storage”部分的 Rules 标签页,来修改这些规则。

数据验证

面向 Cloud StorageFirebase Security Rules 也可用于数据验证,包括验证文件名和路径以及文件元数据属性(例如 contentTypesize)。

service firebase.storage {
  match /b/{bucket}/o {
    match /images/{imageId} {
      // Only allow uploads of any image file that's less than 5MB
      allow write: if request.resource.size < 5 * 1024 * 1024
                   && request.resource.contentType.matches('image/.*');
    }
  }
}

后续步骤

  • 开始Cloud Storage 存储桶规划规则制定程序。

  • 详细了解如何使用安全规则保护数据安全