获取我们在 Firebase 峰会上发布的所有信息,了解 Firebase 可如何帮助您加快应用开发速度并满怀信心地运行应用。了解详情

避免不安全的规则

使用集合让一切井井有条 根据您的偏好保存内容并对其进行分类。

使用本指南了解 Firebase 安全规则配置中的常见漏洞,查看并更好地保护您自己的规则,并在部署之前测试您的更改。

如果您收到有关您的数据未得到适当保护的警报,请查看这些常见错误并更新任何易受攻击的规则。

访问您的 Firebase 安全规则

要查看现有规则,请使用 Firebase CLI 或 Firebase 控制台。确保始终使用相同的方法编辑规则,以避免错误地覆盖更新。如果您不确定本地定义的规则是否反映了最新更新,Firebase 控制台始终会显示最新部署的 Firebase 安全规则版本。

要从Firebase 控制台访问您的规则,请选择您的项目,然后导航到Realtime DatabaseCloud FirestoreStorage 。在正确的数据库或存储桶中单击规则

要从 Firebase CLI 访问您的规则,请转到您的firebase.json 文件中注明的规则文件

了解 Firebase 安全规则

Firebase 安全规则可保护您的数据免受恶意用户的侵害。在 Firebase 控制台中创建数据库实例或 Cloud Storage 存储分区时,您可以选择拒绝所有用户访问(锁定模式)或授予所有用户访问权限(测试模式)。虽然您可能需要在开发过程中进行更开放的配置,但请确保在部署应用程序之前花时间正确配置规则并保护数据。

在您开发应用并测试规则的不同配置时,请使用本地 Firebase 模拟器之一在本地开发环境中运行您的应用。

不安全规则的常见场景

在部署应用程序之前,应检查和更新您可能默认设置的规则或最初开发应用程序时设置的规则。通过避免以下常见陷阱,确保正确保护用户数据。

开放存取

在设置 Firebase 项目时,您可能已经设置了规则以允许在开发期间进行开放访问。您可能认为您是唯一使用您的应用程序的人,但如果您已经部署了它,它就可以在 Internet 上使用。如果您没有对用户进行身份验证和配置安全规则,那么任何猜测您的项目 ID 的人都可以窃取、修改或删除数据。

不推荐:所有用户都有读写权限。

云防火墙

// Allow read/write access to all users under any conditions
// Warning: **NEVER** use this ruleset in production; it allows
// anyone to overwrite your entire database.

service cloud.firestore {
  match /databases/{database}/documents {
    match /{document=**} {
      allow read, write: if true;
    }
  }
}

实时数据库

{
  // Allow read/write access to all users under any conditions
  // Warning: **NEVER** use this ruleset in production; it allows
  // anyone to overwrite your entire database.

  "rules": {
    ".read": true,
    ".write": true
  }
}
    

云储存

// Anyone can read or write to the bucket, even non-users of your app.
// Because it is shared with App Engine, this will also make
// files uploaded via App Engine public.
// Warning: This rule makes every file in your Cloud Storage bucket accessible to any user.
// Apply caution before using it in production, since it means anyone
// can overwrite all your files.

service firebase.storage {
  match /b/{bucket}/o {
    match /{allPaths=**} {
      allow read, write;
    }
  }
}
    
解决方案:限制读写访问的规则。

构建对您的数据层次结构有意义的规则。这种不安全性的常见解决方案之一是使用 Firebase 身份验证的基于用户的安全性。了解有关使用规则对用户进行身份验证的更多信息。

云防火墙

实时数据库

云储存

任何经过身份验证的用户的访问权限

有时,规则会检查用户是否已登录,但不会基于该身份验证进一步限制访问。如果您的规则之一包括auth != null ,请确认您希望任何登录用户都可以访问数据。

不推荐:任何登录用户都对您的整个数据库具有读写权限。

云防火墙

service cloud.firestore {
  match /databases/{database}/documents {
    match /some_collection/{document} {
      allow read, write: if request.auth.uid != null;
    }
  }
}

实时数据库

{
  "rules": {
    ".read": "auth.uid !== null",
    ".write": "auth.uid !== null"
  }
}

云储存

// Only authenticated users can read or write to the bucket
service firebase.storage {
  match /b/{bucket}/o {
    match /{allPaths=**} {
      allow read, write: if request.auth != null;
    }
  }
}
解决方案:使用安全条件限制访问。

在检查身份验证时,您可能还希望使用身份验证属性之一来进一步限制特定用户对特定数据集的访问。了解有关不同身份验证属性的更多信息。

云防火墙

实时数据库

云储存

(实时数据库)不正确的继承规则

实时数据库规则级联,在更浅的父路径上的规则覆盖在更深的子节点上的规则。在子节点上编写规则时,请记住它只能授予附加权限。您无法在数据库中更深的路径上优化或撤销对数据的访问。

不推荐:在子路径
{
  "rules": {
     "foo": {
        // allows read to /foo/*
        ".read": "data.child('baz').val() === true",
        "bar": {
          /* ignored, since read was allowed already */
          ".read": false
        }
     }
  }
}
优化规则
解决方案:在宽泛的父路径上编写规则,并在子路径上授予更具体的权限 如果您的数据访问需要更细化,请保持规则的细化。在保护您的数据中了解有关级联实时数据库规则的更多信息。

封闭式访问

在开发应用程序时,另一种常见的方法是锁定数据。通常,这意味着您已关闭对所有用户的读写访问权限,如下所示:

云防火墙

// Deny read/write access to all users under any conditions
service cloud.firestore {
  match /databases/{database}/documents {
    match /{document=**} {
      allow read, write: if false;
    }
  }
}

实时数据库

{
  "rules": {
    ".read": false,
    ".write": false
  }
}
    

云储存

// Access to files through Cloud Storage is completely disallowed.
// Files may still be accessible through App Engine or Google Cloud Storage APIs.

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

Firebase Admin SDK 和 Cloud Functions 仍然可以访问您的数据库。如果您打算将 Cloud Firestore 或实时数据库用作仅服务器的后端并与 Firebase Admin SDK 结合使用,请使用这些规则。虽然它是安全的,但您应该测试您的应用程序的客户端是否可以正确检索数据。

开始使用 Cloud Firestore 安全规则中详细了解 Cloud Firestore 安全规则及其工作原理。

测试您的 Cloud Firestore 安全规则

要检查您的应用行为并验证您的 Cloud Firestore 安全规则配置,请使用Firebase 模拟器。在部署任何更改之前,使用 Cloud Firestore 模拟器在本地环境中运行和自动化单元测试。

要在 Firebase 控制台中快速验证 Firebase 安全规则,请使用Firebase 规则模拟器