Защита сгенерированных системой узлов в firebase

0

Я прохожу через руководство по правилам, но не нашел ответа на это.

Пользователи приложений могут отправлять "оценки" разных типов, которые затем обрабатываются в JS и записываются в "ранжирующий" узел. Я настроил его так, чтобы каждый раз, когда был отправлен новый балл, рейтинг автоматически пересчитывается, и новый ребенок записывается, если пользователь не существует или не обновляется, если пользователь существует.

Мой вопрос заключается в том, как защитить этот "ранжирующий" узел. Каждый должен уметь читать его, никто, кроме системы, должен иметь возможность написать его. Это помешало бы людям представить свои собственные рейтинги и совокупные баллы.

РЕДАКТИРОВАТЬ

Это операция:

Ref.child('rankings').child(uid).once('value', function (snapshot) {
                    if (snapshot.exists()) {
                        snapshot.ref().update(user); //user object created upstream
                    } else {
                        var payload = {};
                        payload[uid] = user;
                        snapshot.ref().parent().update(payload);
                    }
                });

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

Теги:
firebase

1 ответ

0

Ключевой частью определения проблемы является:

только система должна иметь возможность написать его.

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

После этого безопасность для вашего ranking узла становится:

".read": true,
".write": "auth.uid == 'thesystem'"

В приведенном выше примере я предполагаю, что вы напеваете собственный токен и указываете thesystem как uid.

  • 0
    Это то, что я понял. Я обновил свой вопрос несколькими подробностями, знаете, как я это сделаю? Спасибо
  • 0
    Генерация пользовательского токена требует использования вашего секрета Firebase, который вы никогда не должны иметь в коде на стороне клиента. Итак: действительно, для этого нужен сервер. Но я предполагаю, что «система» уже подразумевает, что у вас есть код, который выполняется в доверенной среде. Если этого не произойдет, вы все равно можете записать uid своего доверенного кода и воспользоваться другим предложенным мною подходом. Они в значительной степени одинаковы с точки зрения правил безопасности.
Показать ещё 3 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню