Попытка сделать приложение безопасным с помощью ключа API, но он не используется - PullRequest
0 голосов
/ 14 октября 2019

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

Есть ли правило, которое мне нужно установить в моем firestore, чтобы оно требовало ключа API? Я погуглил много вещей, но все, что я могу найти, это статьи о том, почему нормально, когда твой ключ доступен для публики.

Ответы [ 2 ]

2 голосов
/ 14 октября 2019

Невозможно ограничить доступ к Firestore на основе какого-либо открытого ключа API или домена веб-сайта. Если вы публикуете приложение, предоставляющее прямой доступ к Cloud Firestore (или Cloud Storage, или базе данных в реальном времени), единственный способ защитить его - это комбинация Firebase Authentication и правил безопасности . Правила безопасности позволяют вам указать, кто может читать и писать, какие коллекции и документы.

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

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

Небольшое отклонение от Отличный ответ Дуга состоит в том, чтобы позволить всем пользователям писать в конкретные документы, которые уже существуют и в которых невозможно угадать имена. Эти имена документов затем становятся вашими собственными API-ключами, которыми вы делитесь (вне диапазона) с пользователями вашего приложения.

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

service cloud.firestore {
  match /databases/{database}/documents {
    match /{document=**} {
      allow create: if false;
      allow update: if exists(resource['__name__']);
      allow get: if true;
      allow list: if false;
    }
  }
}

Итак: любой может получить / обновить любой существующий документ, имя которого он знает, но он не может создатьдокумент, а также получить список всех документов.

Это исключает необходимость использования проверки подлинности Firebase. С другой стороны, это означает, что вы не можете заблокировать доступ для каждого пользователя. Любой пользователь, который каким-либо образом получает доступ к имени документа, теперь может читать / писать его по своему желанию.

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