Моя база данных Firebase Cloud Firestore безопасна или уязвима? - PullRequest
0 голосов
/ 12 октября 2019

Мне нужна помощь, чтобы определить, является ли моя установка Firebase Cloud Firestore безопасной или уязвимой для хаков.

В базе данных у меня есть одна коллекция под названием userids , которая содержит много документов. Каждый документ содержит данные, относящиеся к пользователю, идентификатор пользователя которого является именем документа. Примером этого является:

userids (collection)
    123456 (document)
        field1: "..."
        field2: "..."
        field3: "..."
    777777 (document)
        field1: "..."
        field2: "..."
        field3: "..."
    999999 (document)
        field1: "..."
        field2: "..."
        field3: "..."

Функциональность, которая мне нужна, имеет следующий вид:

• С учетом идентификатора пользователя, такого как userid=123456, клиент или сервер должны иметь возможность читатьи записывать данные только в документ с именем, равным 123456 (клиент / сервер не может читать или записывать данные в документы с именами 777777 или 999999 ).

• Ни при каких обстоятельствах никто не может получить доступ к списку Документов, которые существуют в базе данных, или к именам любого из этих Документов.

Правила безопасности, которые я должен применить для этого поведения, в настоящее время:

rules_version = '2';
service cloud.firestore {
  match /databases/{database}/documents {
    match /{document=**} {
      allow read, write;
    }
  }
}

Теперь предположим, что все userids в базе данных на самом делеХэш-значения SHA256, которые уникально представляют каждого пользователя. Предполагая, что этот хэш SHA256 был известен только пользователю, будет ли эта установка безопасной, поскольку для чтения / записи из документа вам потребуется знать хеш пользователей? Можно ли как-нибудь узнать имена всех Документов в базе данных?

1 Ответ

1 голос
/ 12 октября 2019

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

Более безопасным было бы позволить им получить документ только после того, как они знают его полный путь. / ID, и не разрешать им перечислять документы в коллекции. Вы можете сделать это, используя более гранулярные правила Firestore , разбив read на list и get.

rules_version = '2';
service cloud.firestore {
  match /databases/{database}/documents {
    match /{document=**} {
      allow get;
    }
  }
}

Это позволяет им получить документ, если они знают его полный путь, но не получают список всех документов.

...