Безопасная база данных Firestore с использованием правил. Проверьте аутентификацию. Это достаточно? - PullRequest
1 голос
/ 08 марта 2020

Я новичок в Firebase и пытаюсь понять правила базы данных. Я использую Firestore.

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

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

Я понимаю, что это делает работу:

service cloud.firestore {
  match /databases/{database}/documents {
    match /{document=**} {
      allow read, write: if request.auth.uid != null;
    }
  }
}

Теперь мой вопрос: этого достаточно? Я не хакер, поэтому я не знаю точно, как хакер мог или мог взломать и обнаружить / изменить материал в моей базе данных, но означает ли это, что с помощью приложения в базу данных могут быть внесены только изменения? Может ли кто-нибудь все еще взломать это, если они не используют приложение, и аутентифицировать каким-либо другим незаконным способом.

Большое спасибо за помощь, я пытался прочитать, чтобы докопаться до сути, но не удалось.

Ответы [ 2 ]

2 голосов
/ 09 марта 2020

Правила безопасности Firebase не могут ограничивать доступ к одному приложению. Все API доступны для публичного использования c для всех, кто имеет соединение rnet. Все они документированы прямо здесь: https://firebase.google.com/docs/reference/rest/auth

Цель Аутентификации Firebase состоит в том, чтобы обеспечить индивидуальный контроль доступа каждого отдельного пользователя соответствующим образом. Как только вы разрешите пользователям создавать учетные записи с использованием анонимной аутентификации или авторизации по электронной почте, они получат полный доступ ко всем документам в базе данных с этими правилами. Итак, то, что у вас есть сейчас, на самом деле не является «безопасным» для большинства определений этого слова. Вам придется решить, достаточно ли это «безопасно» для ваших целей.

Вы также можете получить электронное письмо от Firebase, в котором говорится, что ваши правила небезопасны. Не очень хорошая идея использовать /{document=**}, подобный этому, который соответствует всем документам, что может не соответствовать вашим намерениям. Как минимум, вы должны вызывать отдельные коллекции, к которым вы хотите, чтобы пользователи обращались, вместо использования этого глобального подстановочного знака.

1 голос
/ 08 марта 2020

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

Любой, кто может получить ваши элементы конфигурации Firebase , может написать простое HTML, используя JavaScript SDK, и попытайтесь взаимодействовать с бэкэндом Firestore. Обратите внимание, что получить элементы конфигурации Firebase несложно, подробнее см. Внизу.

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

Теперь важно отметить следующий момент о Firebase Аутентификация и «зарегистрированные» пользователи:

Следует отметить, что любой может «создать нового пользователя в вашем проекте Firebase, вызвав метод createUserWithEmailAndPassword() или выполнив вход в систему пользователя». впервые с использованием федеративного провайдера идентификации, такого как Google Sign-In или Facebook Login »(если, конечно, эти провайдеры идентификации активированы). См. do c.

Итак, опять же, с вашими элементами конфигурации Firebase, кто-то может легко создать страницу HTML, которая вызывает метод createUserWithEmailAndPassword().

Это означает, что если вы хотите ограничить доступ к вашему приложению для некоторых определенных c пользователей, просто используя allow read, write: if request.auth.uid != null в правилах безопасности вашего Firestore, этого недостаточно .

Один из возможных подходов - использовать Пользовательские заявки . Например, вы можете установить конкретную заявку c для всех авторизованных пользователей (например, authorized = true) и адаптировать свои правила безопасности, чтобы проверить наличие этой заявки в токене пользователя.


Примечание. Как найти элементы конфигурации Firebase в веб-приложении?

Найти объект конфигурации Firebase не сложно. Просто просмотрите все файлы HTML или JS, составляющие приложение, для строки apiKey.

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