#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 и блокируют запись с помощью любого другого ключа свойства.
Это не так уж и важно, но вы не будете получать больше писем о небезопасных правилах.