Cloud Firestore rules - разрешить кому-либо обновлять одно указанное поле c в документе - PullRequest
0 голосов
/ 16 февраля 2020

Я работаю над приложением Po C (Proof of Concept), которое пользователи могут загружать обои на свое устройство. Все данные обслуживаются с помощью Cloud Firestore & Storage.

Для этого приложения нет логина. Любой желающий может скачать приложение и сразу же скачать обои по своему желанию.

Имея это в виду ... Я хотел бы иметь счетчик, который отслеживает, сколько раз были загружены все указанные обои c.

Пока он у меня есть «работает» - я подвергаю сомнению правила, которые я установил в Firebase ..

rules_version = '2';
service cloud.firestore {
  match /databases/{database}/documents {
    match /{document=**} {
      allow read;
      allow write: if request.auth != null;
      allow update: if request.resource.data.counter is number;
    }
  }
}

Мой мыслительный процесс с приведенными выше правилами:

  • Каждый может читать.
  • Только авторизованные пользователи могут писать. (Я управляю всеми данными с помощью автономной системы управления контентом; Flamelink; поэтому единственным аутентифицированным пользователем является я.)
  • Обновите счетчик, если данные являются числом.

Это последнее правило, которое я подвергаю сомнению.

Является ли это безопасным методом обеспечения безопасности при развертывании в рабочей среде?

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

1 Ответ

1 голос
/ 20 февраля 2020

Правила не являются «безопасными» ни при каком нормальном определении этого слова. Вот что они позволяют. Любой, у кого есть соединение inte rnet, кто знает название проекта (которое легко получить) может:

  • Запросить любой документ в базе данных
  • Обновить любой существующий документ с любым значением числового значения c для counter в любом документе (оно даже не должно увеличиваться или быть положительным целым числом)

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

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

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

Но если разрешить publi c доступ для чтения / записи - это на самом деле то, что вы хотите разрешить, вам будет лучше, если ваши правила будут более точными c. Например, вы можете ограничить, в какую коллекцию может писать анонимный пользователь, и быть уверенным, что он может только увеличивать счетчик, если это то, что вам нужно.

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