Что плохого в реализации правил безопасности Firebase в самом приложении? - PullRequest
1 голос
/ 12 июня 2019

Я новичок в базе данных Firebase, и у меня возникают проблемы с пониманием правил безопасности.

Пример правила 1:

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

Приведенное выше правило позволяет всем читать и записывать базу данных.

Пример правила 2:

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

Приведенное выше правило позволяет только аутентифицированному пользователю читать и записывать только свои собственные данные.

Мой вопрос заключается в том, чтобы установить для правила безопасности моей базы данных примерное правило 1 и разработать свое приложение таким образом, чтобы толькоаутентифицированные пользователи могут читать и записывать данные, что с ними не так?

Что не так с реализацией правил безопасности в самом приложении?

Ответы [ 3 ]

3 голосов
/ 12 июня 2019

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

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

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

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

Что плохого в реализации правил безопасности в самом приложении?

Вы не можете добавить правила безопасности в свое приложение. Вы можете добавить некоторые ограничения, но вы можете , а не заставить сервер отклонить операцию в соответствии с некоторыми правилами.

1 голос
/ 12 июня 2019

Когда вы получаете доступ к базе данных Firebase из своего приложения, ваше приложение содержит информацию о конфигурации, которая необходима для доступа к вашей базе данных.Для базы данных реального времени это URL шаблона https://yourprojectname.firebaseio.com, который находится в вашем google-services.json.Приложение должно содержать эту информацию, чтобы ваше приложение могло работать.Без него приложение не будет знать, к какой базе данных обращаться.

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

Очень простой пример - они могут использовать Firebase REST API для удаления всех ваших данных .

curl -X DELETE 'https://yourprojectname.firebaseio.com/.json'

Если вы реализуете логику в сервере Firebase-Что касается правил безопасности, то злоумышленник не сможет обойти его.Даже если они берут URL вашей базы данных, их вызовы кода / REST также будут проверены на соответствие правилам безопасности и отклонены, если они не совпадают.

1 голос
/ 12 июня 2019

Вы должны пройти через это https://firebase.google.com/docs/database/security/securing-data. Эти правила используются для определения безопасности ваших данных. Какой тип данных может читать и кем. Правила обычно соответствуют структуре данных, которую вы использовали в своей базе данных.

{
 "users": {
"users0": {
  "name": "ABC",
   "marks":"75",
  "email": "m@gmail.com"
},
"users1": {
  "name": "XYZ",
  "marks":"30",
  "email": "abc@gmail.com"
},

}
}

Чтобы прочитать данные пользователей, чьи оценки выше 70, мы можем написать наше правило как

{
"rules": {
"users": {
  "$user": {
    // only users whose marks greater than 70  can be read
    ".read": "data.child('marks').val() > (70)",

  }
  }
 }
 }

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...