Эта страница была переведа с помощью Cloud Translation API.
Switch to English

Общие сведения о правилах базы данных Firebase Realtime

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

Правила безопасности баз данных в реальном времени имеют синтаксис, подобный JavaScript, и бывают четырех типов:

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

Обзор безопасности базы данных в реальном времени

База данных Firebase Realtime предоставляет полный набор инструментов для управления безопасностью вашего приложения. Эти инструменты упрощают аутентификацию пользователей, принудительное применение разрешений пользователей и проверку входных данных.

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

Аутентификация

Обычный первый шаг в защите вашего приложения - это идентификация ваших пользователей. Этот процесс называется аутентификацией . Вы можете использовать Firebase Authentication, чтобы пользователи могли входить в ваше приложение. Firebase Authentication включает поддержку распространенных методов аутентификации, таких как Google и Facebook, а также вход по электронной почте и паролю, анонимный вход и многое другое.

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

Авторизация

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

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

.read и .write каскадируются, поэтому этот набор правил предоставляет доступ для чтения к любым данным в пути /foo/ а также к любым более глубоким путям, таким как /foo/bar/baz . Обратите внимание, что .read .write правила .read и .write в базе данных переопределяют более глубокие правила, поэтому доступ для чтения к /foo/bar/baz все равно будет предоставлен в этом примере, даже если правило на пути /foo/bar/baz оценено как false.

Правила безопасности базы данных в реальном времени включают встроенные переменные и функции, которые позволяют ссылаться на другие пути, временные метки на стороне сервера, информацию для аутентификации и многое другое. Вот пример правила, которое предоставляет доступ для записи аутентифицированным пользователям в /users/<uid>/ , где <uid> - это идентификатор пользователя, полученный с помощью аутентификации Firebase.

{
  "rules": {
    "users": {
      "$uid": {
        ".write": "$uid === auth.uid"
      }
    }
  }
}

Валидация данных

База данных Firebase Realtime не имеет схемы. Это позволяет легко изменять вещи по мере разработки, но когда ваше приложение будет готово к распространению, важно, чтобы данные оставались согласованными. Язык правил включает правило .validate которое позволяет применять логику проверки, используя те же выражения, .read и .write правил .read и .write . Единственное отличие состоит в том, что правила проверки не каскадируются , поэтому все соответствующие правила проверки должны быть истинными, чтобы запись была разрешена.

Это правило требует, чтобы данные, записываемые в /foo/ были строкой менее 100 символов:

{
  "rules": {
    "foo": {
      ".validate": "newData.isString() && newData.val().length < 100"
    }
  }
}

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

Определение индексов базы данных

База данных Firebase Realtime позволяет упорядочивать и запрашивать данные. Для небольших объемов данных база данных поддерживает специальные запросы, поэтому индексы обычно не требуются во время разработки. Однако перед запуском вашего приложения важно указать индексы для любых запросов, которые вам нужны, чтобы они продолжали работать по мере роста вашего приложения.

Индексы указываются с .indexOn правила .indexOn . Вот пример объявления индекса, который будет индексировать поля высоты и длины для списка динозавров:

{
  "rules": {
    "dinosaurs": {
      ".indexOn": ["height", "length"]
    }
  }
}

Следующие шаги