Это руководство поможет вам понять, какие уязвимости часто встречаются в конфигурациях Cloud Firestore Security Rules, проверить и улучшить защиту собственных правил, а также протестировать изменения перед их развертыванием.
Запрос к ИИ для помощи от ИИ в
Чтобы получить помощь от ИИ, скопируйте запрос ниже и вставьте его в Antigravity, Gemini в Android Studio, Claude Code, Codex, Cursor или другой ИИ-агент для программирования. Вы можете настроить запрос и повторить его с агентом. Подробные инструкции по установке вы найдете в статье Навыки агента Firebase.
Help me use Firebase in my app.
1. Make sure that **Firebase agent skills** are installed and updated. For Claude Code, Codex, or Cursor agents, help me install the Firebase plugin. For other agents, run `npx skills add firebase/agent-skills`. Always try to use **Firebase agent skills** for Firebase-related tasks.
2. Help me write, validate, and deploy Firebase Security Rules to protect my app's Firestore data.
Если вы получили оповещение о том, что ваша база данных Cloud Firestore недостаточно защищена, вы можете устранить уязвимости, изменив и протестировав Cloud Firestore Security Rules.
Чтобы посмотреть существующие правила безопасности, перейдите на вкладку Правила в консоли Firebase.
Что такое Cloud Firestore Security Rules
Cloud Firestore Security Rules защищают ваши данные от злоумышленников. По умолчанию правила для любого экземпляра Cloud Firestore, созданного в консоли Firebase, запрещают доступ всем пользователям. Чтобы разработать приложение и получить доступ к базе данных, вам нужно изменить эти правила и, возможно, предоставить полный доступ всем пользователям в среде разработки. Однако перед развертыванием приложения в рабочей среде уделите время правильной настройке правил и защите данных.
При разработке приложения и тестировании различных конфигураций правил используйте эмулятор Cloud Firestore, чтобы запустить приложение в локальной среде разработки.
Распространенные сценарии с небезопасными правилами
Cloud Firestore Security Rules, которые вы могли настроить по умолчанию или в начале работы над приложением с помощью Cloud Firestore, необходимо проверить и обновить перед развертыванием приложения. Чтобы обеспечить надлежащую защиту пользовательских данных, избегайте распространенных ошибок, описанных ниже.
Открытый доступ
При настройке Cloud Firestore вы могли задать правила, разрешающие открытый доступ во время разработки. Вы можете думать, что вы единственный пользователь своего приложения, но если вы его развернули, оно доступно в интернете. Если вы не настроите аутентификацию пользователей и правила безопасности, то любой, кто угадает идентификатор вашего проекта, сможет украсть, изменить или удалить данные.
| Не рекомендуется: доступ для чтения и записи для всех пользователей. |
// Allow read/write access to all users under any conditions // Warning: **NEVER** use this rule set in production; it allows // anyone to overwrite your entire database. service cloud.firestore { match /databases/{database}/documents { match /{document=**} { allow read, write: if true; } } }
|
Решение. Правила, ограничивающие доступ на чтение и запись.
Создайте правила, которые подходят для иерархии ваших данных. Одно из распространенных решений этой проблемы безопасности – безопасность на основе пользователей с помощью Firebase Authentication. Подробнее об аутентификации пользователей с помощью правил… |
Только владелец контента
service cloud.firestore { match /databases/{database}/documents { // Allow only authenticated content owners access match /some_collection/{document} { // Allow reads and deletion if the current user owns the existing document allow read, delete: if request.auth.uid == resource.data.author_uid; // Allow creation if the current user owns the new document allow create: if request.auth.uid == request.resource.data.author_uid; // Allow updates by the owner, and prevent change of ownership allow update: if request.auth.uid == request.resource.data.author_uid && request.auth.uid == resource.data.author_uid; } } }
Смешанный доступ
service cloud.firestore { match /databases/{database}/documents { // Allow public read access, but only content owners can write match /some_collection/{document} { // Allow public reads allow read: if true // Allow creation if the current user owns the new document allow create: if request.auth.uid == request.resource.data.author_uid; // Allow updates by the owner, and prevent change of ownership allow update: if request.auth.uid == request.resource.data.author_uid && request.auth.uid == resource.data.author_uid; // Allow deletion if the current user owns the existing document allow delete: if request.auth.uid == resource.data.author_uid; } } }
Доступ для всех пользователей, прошедших аутентификацию
Иногда Cloud Firestore Security Rules проверяют, вошел ли пользователь в аккаунт, но не ограничивают доступ на основе этой аутентификации. Если в одном из правил есть auth != null, убедитесь, что вы хотите предоставить доступ к данным всем пользователям, выполнившим вход.
| Не рекомендуется. Любой вошедший в аккаунт пользователь имеет доступ на чтение и запись ко всей базе данных. |
service cloud.firestore { match /databases/{database}/documents { match /some_collection/{document} { allow read, write: if request.auth != null; } } }
|
Решение. Ограничьте доступ с помощью условий безопасности.
При проверке аутентификации вы также можете использовать одно из свойств аутентификации, чтобы дополнительно ограничить доступ к определенным наборам данных для определенных пользователей. Подробнее о добавлении условий безопасности и о доступе на основе ролей… |
Доступ на основе ролей
service cloud.firestore { match /databases/{database}/documents { // Assign roles to all users and refine access based on user roles match /some_collection/{document} { allow read: if request.auth != null && get(/databases/$(database)/documents/users/$(request.auth.uid)).data.role == "Reader" allow write: if request.auth != null && get(/databases/$(database)/documents/users/$(request.auth.uid)).data.role == "Writer" // Note: Checking for roles in your database using `get` (as in the code // above) or `exists` carry standard charges for read operations. } } }
Доступ на основе атрибутов
// Give each user in your database a particular attribute // and set it to true/false // Then, use that attribute to grant access to subsets of data // For example, an "admin" attribute set // to "true" grants write access to data service cloud.firestore { match /databases/{database}/documents { match /collection/{document} { allow write: if get(/databases/$(database)/documents/users/$(request.auth.uid)).data.admin == true; allow read: true; } } }
Смешанный доступ
service cloud.firestore {
match /databases/{database}/documents {
// Allow public read access, but only content owners can write
match /some_collection/{document} {
allow read: if true
allow write: if request.auth.uid == request.resource.data.author_uid
}
}
}
Доступ для неподтвержденных адресов электронной почты
Иногда Cloud Firestore Security Rules проверяет, принадлежит ли адрес электронной почты пользователя определенному домену. Хотя в целом это хорошая практика, электронные письма не всегда проверяются во время входа в систему, пока пользователь не выполнит дополнительный шаг после получения письма с подтверждением. Убедитесь, что вы проверяете, действительно ли адрес электронной почты принадлежит пользователю.
| Не рекомендуется. Любой пользователь может войти с произвольным адресом электронной почты. |
service cloud.firestore { match /databases/{database}/documents { // Allow access based on email domain match /some_collection/{document} { allow read: if request.auth != null && request.auth.email.endsWith('@example.com') } } }
| Решение. Ограничьте доступ только подтвержденными адресами электронной почты. |
Подтверждение адреса электронной почты
service cloud.firestore { match /databases/{database}/documents { // Allow access based on email domain match /some_collection/{document} { allow read: if request.auth != null && request.auth.email_verified && request.auth.email.endsWith('@example.com') } } }
Закрытый доступ
При разработке приложения часто используется другой подход – заблокировать доступ к данным. Обычно это означает, что вы закрыли доступ на чтение и запись для всех пользователей, как показано ниже:
// Deny read/write access to all users under any conditions
service cloud.firestore {
match /databases/{database}/documents {
match /{document=**} {
allow read, write: if false;
}
}
}
Firebase Admin SDK и Cloud Functions по-прежнему будут иметь доступ к вашей базе данных. Используйте эти правила, если вы планируете использовать Cloud Firestore только в качестве серверного бэкенда в сочетании с Firebase Admin SDK. Хотя это безопасно, вам следует проверить, могут ли клиенты вашего приложения правильно получать данные.
Подробнее о том, что такое Cloud Firestore Security Rules и как они работают, рассказывается в статье Начало работы с Cloud Firestore Security Rules.
Откройте приложение Cloud Firestore Security Rules
Чтобы проверить работу приложения и конфигурации Cloud Firestore Security Rules, используйте эмулятор Cloud Firestore. Используйте эмулятор Cloud Firestore, чтобы запускать и автоматизировать модульное тестирование в локальной среде перед развертыванием изменений.
Чтобы быстро протестировать обновленные правила Cloud Firestore Security Rules в консоли Firebase, используйте инструмент Rules Playground.

- Чтобы открыть тестовую среду, на вкладке Правила нажмите Тестовая среда для правил.
- В настройках песочницы правил выберите параметры для тестирования, в том числе:
- Тестирование чтения или записи
- Определенное местоположение в базе данных в виде пути.
- Тип аутентификации: без аутентификации, аутентифицированный анонимный пользователь или определенный идентификатор пользователя.
- Данные, относящиеся к документу, на которые ссылаются ваши правила (например, если ваши правила требуют наличия определенного поля, прежде чем разрешить запись).
- Нажмите Выполнить и посмотрите результаты на баннере над окном правил.