Безопасный доступ к базе данных Firebase в Android

#firebase #firebase-realtime-database #firebase-security

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

Вопрос:

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

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

И теперь я получаю только сообщения о небезопасном чтении.

   [Firebase] Your Realtime Database 'abc-xyz' has insecure rules
   We've detected the following issue(s) with your security rules:
         any user can read your entire database
  

Но если я изменю значение read на false, я не смогу прочитать какие-либо изменения значений в режиме реального времени. Может кто-нибудь, пожалуйста, помочь мне понять, как я могу защитить как чтение, так и запись, но также иметь возможность продолжать считывать значения из приложения?

PS: на данный момент я не использую аутентификацию Firebase в своем приложении.

Комментарии:

1. Если вы не используете аутентификацию Firebase, все, что вы можете сделать, это написать правила, ограничивающие, какие конкретные дочерние элементы могут быть прочитаны кем угодно.

2. Я также хочу ограничить правила чтения.

Ответ №1:

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

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

Если вы не храните пользовательские данные, вам, вероятно, не нужна никакая авторизация. Вы все равно можете ограничить чтение и запись пользователей, добавив некоторую область, когда доступно чтение / запись.
Например:

 "rules": {

"PublicData":{
  "SomePublicChild":{
    "ChildProperty1": { ".validate":true },
    "ChildProperty2": { ".validate":true },
    "$other": {".validate":false },
  },
  ".write":true,
  ".read":true,
  ".validate":"newData.hasChild(SomePublicChild)"
},
"PrivateData":{
  ".write":false,
  ".read":false,
}}
  

Эти правила позволят любому пользователю выполнять запись / чтение в узел PublicData, а любому другому — записывать / читать узел PrivateData. Правила также защитят структуру ваших общедоступных данных, они разрешают запись только в объект PublicData со свойствами ChildProperty1 или ChildProperty2 и блокируют запись с помощью любого другого ключа свойства.

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