Catch up on everything announced at Firebase Summit, and learn how Firebase can help you accelerate app development and run your app with confidence. Learn More

Избегайте небезопасных правил

Оптимизируйте свои подборки Сохраняйте и классифицируйте контент в соответствии со своими настройками.

Используйте это руководство, чтобы понять распространенные уязвимости в конфигурациях правил безопасности Firebase, просмотреть и улучшить безопасность собственных правил, а также протестировать свои изменения перед их развертыванием.

Если вы получили предупреждение о том, что ваши данные не защищены должным образом, просмотрите эти распространенные ошибки и обновите все уязвимые правила.

Доступ к вашим правилам безопасности Firebase

Чтобы просмотреть существующие правила, используйте интерфейс командной строки Firebase или консоль Firebase. Убедитесь, что вы редактируете свои правила, используя один и тот же метод, последовательно, чтобы избежать ошибочной перезаписи обновлений. Если вы не уверены, отражают ли ваши локально определенные правила самые последние обновления, в консоли Firebase всегда отображается самая последняя развернутая версия ваших правил безопасности Firebase.

Чтобы получить доступ к своим правилам из консоли Firebase , выберите свой проект, а затем перейдите к Базе данных реального времени , Cloud Firestore или Storage . Нажмите « Правила» , как только вы окажетесь в нужной базе данных или сегменте хранилища.

Чтобы получить доступ к своим правилам из интерфейса командной строки Firebase, перейдите к файлу правил, указанному в вашем файле firebase.json .

Понимание правил безопасности Firebase

Правила безопасности Firebase защищают ваши данные от злоумышленников. Когда вы создаете экземпляр базы данных или корзину облачного хранилища в консоли Firebase, вы можете либо запретить доступ всем пользователям ( заблокированный режим ), либо предоставить доступ всем пользователям ( тестовый режим ). Хотя вам может понадобиться более открытая конфигурация во время разработки, обязательно уделите время правильной настройке правил и защите данных перед развертыванием приложения.

При разработке приложения и тестировании различных конфигураций правил используйте один из локальных эмуляторов Firebase для запуска приложения в локальной среде разработки.

Распространенные сценарии с небезопасными правилами

Правила, которые вы, возможно, установили по умолчанию или когда вы изначально работали над своим приложением, должны быть пересмотрены и обновлены перед развертыванием вашего приложения. Убедитесь, что вы правильно защищаете данные своих пользователей, избегая следующих распространенных ошибок.

Открытый доступ

При настройке проекта Firebase вы могли установить правила, разрешающие открытый доступ во время разработки. Вы можете подумать, что вы единственный человек, использующий ваше приложение, но если вы его развернули, оно будет доступно в Интернете. Если вы не выполняете аутентификацию пользователей и не настраиваете правила безопасности, любой, кто угадает идентификатор вашего проекта, сможет украсть, изменить или удалить данные.

Не рекомендуется: доступ для чтения и записи для всех пользователей.

Облако Firestore

// 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. Узнайте больше об аутентификации пользователей с помощью правил .

Облако Firestore

База данных реального времени

Облачное хранилище

Доступ для любого аутентифицированного пользователя

Иногда правила проверяют, что пользователь вошел в систему, но не ограничивают доступ на основе этой аутентификации. Если одно из ваших правил включает auth != null , подтвердите, что вы хотите, чтобы любой пользователь, вошедший в систему, имел доступ к данным.

Не рекомендуется: любой вошедший в систему пользователь имеет доступ для чтения и записи ко всей вашей базе данных.

Облако Firestore

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;
    }
  }
}
Решение: ограничить доступ с помощью условий безопасности.

При проверке подлинности вы также можете использовать одно из свойств проверки подлинности, чтобы дополнительно ограничить доступ определенных пользователей к определенным наборам данных. Узнайте больше о различных свойствах проверки подлинности .

Облако Firestore

База данных реального времени

Облачное хранилище

(База данных в реальном времени) Неправильно унаследованные правила

Каскад правил базы данных в реальном времени, с правилами на более поверхностных, родительских путях, переопределяющих правила на более глубоких, дочерних узлах. Когда вы пишете правило на дочернем узле, помните, что оно может предоставлять только дополнительные привилегии. Вы не можете уточнить или отозвать доступ к данным на более глубоком пути в вашей базе данных.

Не рекомендуется: уточнение правил в дочерних путях
{
  "rules": {
     "foo": {
        // allows read to /foo/*
        ".read": "data.child('baz').val() === true",
        "bar": {
          /* ignored, since read was allowed already */
          ".read": false
        }
     }
  }
}
Решение. Напишите общие правила для родительских путей и предоставьте более конкретные привилегии для дочерних путей. Узнайте больше о каскадных правилах базы данных в реальном времени в статье « Защитите свои данные ».

Закрытый доступ

Пока вы разрабатываете свое приложение, другим распространенным подходом является блокировка ваших данных. Как правило, это означает, что вы закрыли доступ для чтения и записи для всех пользователей следующим образом:

Облако Firestore

// 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 Firestore или базу данных Realtime в качестве бэкенда только для сервера в сочетании с Firebase Admin SDK. Хотя это безопасно, вы должны проверить, могут ли клиенты вашего приложения правильно извлекать данные.

Узнайте больше о правилах безопасности Cloud Firestore и о том, как они работают, в статье Начало работы с правилами безопасности Cloud Firestore .

Проверьте свои правила безопасности Cloud Firestore

Чтобы проверить поведение вашего приложения и проверить настройки правил безопасности Cloud Firestore, используйте эмулятор Firebase . Используйте эмулятор Cloud Firestore для запуска и автоматизации модульных тестов в локальной среде перед развертыванием каких-либо изменений.

Чтобы быстро проверить правила безопасности Firebase в консоли Firebase, используйте Симулятор правил Firebase .