Отключить доступ к Firestore из-за пределов приложения - PullRequest
0 голосов
/ 04 мая 2020

У меня есть (частное, т.е. для меня и пары других людей) приложение Flutter, и оно должно работать на iOS и Android. Он использует Firestore за кулисами для обмена данными и Firebase Authentication с Google Sign In в качестве единственного поставщика. Вот подробности настройки:

  1. Правила доступа разрешают доступ только аутентифицированным пользователям, то есть любому пользователю, о котором мой проект Firebase знает.
  2. Чтобы другие люди не могли использовать мои ключи Я ограничил их для соответствующих типов приложений, то есть ключ iOS только для данного iOS идентификатора пакета, ключ Android только для указанного имени пакета и моего (отладочного) ключа SHA1.

Вопрос: гарантирует ли это, что люди, которые знают мой идентификатор проекта и URL БД и т. Д. c. не могу просто читать и записывать данные без моего приложения? Источник находится на GitHub, и GoogleService-Info.plist и google-services.json также зафиксированы. (Я провел некоторое исследование, и кажется, что эта информация не является секретной, поскольку она в любом случае доступна в APK и IPA.)

Мои предположения, исправляйте мои, когда я ошибаюсь:

  1. Хотя к базе данных можно получить доступ, скажем, с помощью Postman, с моим правилом безопасности они должны будут проходить аутентификацию с действительным пользователем, которого знает мой проект Firebase.
  2. Чтобы добавить пользователей в мою базу данных пользователей Firebase из-за пределов моего приложение, кто-то должен будет использовать информацию о моем проекте и ключи API. Если бы им удалось это сделать, они могли бы просто войти в систему Google с помощью своей учетной записи, которая создаст нового пользователя в моих проектах, и использовать приложение.
  3. В моем случае это означает, что им потребуется создать iOS или Android приложение, поскольку ключи «ограничены», то есть они разрешены только для определенного типа приложения (iOS и Android здесь). Они не могут использовать ключи API в веб-приложении. (Действительно ли это правда, есть ли какая-либо информация в ключах, чтобы предотвратить, скажем, использование клавиши Android для приложения iOS или наоборот?)
  4. Это невозможно для Android поскольку я ограничил ключ - злоумышленник должен будет создать приложение Android с тем же именем пакета, что и мое (разрешено), но также должен будет подписать его только с помощью закрытого ключа.
  5. I ' я не уверен насчет iOS. Я также ограничил ключ, указав свой идентификатор пакета, и он должен быть глобально уникальным при создании устройства, но, честно говоря, я не знаю, должен ли он также быть уникальным для симулятора. В противном случае это означало бы, что кто-то может создать приложение с моим идентификатором пакета, запустить на своем симуляторе, войти в систему с помощью своей учетной записи Google и теперь иметь доступ к данным.

Может ли кто-то подтвердить, что это работает так, как я предполагаю? И уточнить ключи сомнения в № 3 и iOS сомнения в № 5?

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