Защита данных Firebase от авторизованных пользователей для обновления своих данных

В моем приложении используется аутентификация AngularJS + Firebase с использованием Google. Когда пользователь регистрируется в приложении, оно создает запись этого пользователя в базе данных, как показано ниже:

user
  ->Firebase Unique Key
           -> UserId: "google ID"
           -> User Name: "User Name"
           -> Payment Status:"No"

Теперь, как только пользователь войдет в систему, он увидит вариант оплаты, и после того, как платеж будет выполнен, значение базы данных для этого конкретного идентификатора будет заполнено в соответствии с «Статусом платежа», как показано в JSON выше. Если статус платежа «да», только пользователь может просматривать главную страницу.

Я создал правила безопасности, как показано ниже:

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

  "user":{
    ".write": "auth.provider == 'google' && auth.uid!=null"

  }
}}

Теперь вопрос: любой пользователь, который может войти в систему с помощью Google, имеет доступ для записи в эту базу данных. Таким образом, как только пользователь авторизован, он может вносить изменения в базу данных. Также пользователь может запускать свой собственный код с локального хоста и вносить изменения в базу данных. Я не хочу, чтобы какой-либо пользователь взламывал данные и помечал статус платежа как «Да» и переходил на основной веб-сайт.

Как убедиться, что авторизованный пользователь не будет выполнять какие-либо вредоносные действия в этой базе данных.




Ответы (1)


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

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

Таким образом, вам нужно будет установить другое лицо для этого поля. Это может быть либо человек-администратор, либо сервер.

Человеческое общение не так редко, как вы думаете. Многие веб-сервисы начинают с того, что владелец проверяет платежи и обновляет защищенные метаданные (статус платежа в вашем сценарии). Как только это становится неуправляемым, вы, вероятно, готовы к другому варианту.

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

person Frank van Puffelen    schedule 04.04.2016
comment
Спасибо Фрэнк за ответ. Но есть ли способ в firebase запретить пользователям запускать одну и ту же копию кода на своем локальном хосте. Поскольку у них есть доступ к базе данных, они, безусловно, могут выполнять любые вредоносные действия, ссылаясь на URL-адрес firebase со своего собственного локального хоста. Я попытался удалить localhost из авторизованного домена, но в firebase по умолчанию авторизованные домены включают: localhost - person Lani; 04.04.2016
comment
Есть ли способ в firebase запретить пользователям запускать одну и ту же копию кода на своем локальном хосте Нет. Если это ваш вопрос, я отмечу его как дубликат. Но подумайте об этом на мгновение: если пользователь запускает копию вашего кода и придерживается установленных вами правил безопасности, какие злонамеренные действия они могут использовать? - person Frank van Puffelen; 04.04.2016
comment
Они могут затопить базу данных, храня какие-то вредоносные скрипты. Согласно вашему ответу, приведенному выше, это можно остановить, только если я использую сервер. Но в случае, если я просто использую клиентский язык и firebase, тогда они могут хранить что угодно в базе данных, поскольку у них есть доступ к этой базе данных. - person Lani; 04.04.2016