У меня есть (частное, т.е. для меня и пары других людей) приложение Flutter
, и оно должно работать на iOS
и Android
. Он использует Firestore
за кулисами для обмена данными и Firebase Authentication
с Google Sign In
в качестве единственного поставщика. Вот подробности настройки:
- Правила доступа разрешают доступ только аутентифицированным пользователям, то есть любому пользователю, о котором мой проект Firebase знает.
- Чтобы другие люди не могли использовать мои ключи Я ограничил их для соответствующих типов приложений, то есть ключ iOS только для данного iOS идентификатора пакета, ключ Android только для указанного имени пакета и моего (отладочного) ключа SHA1.
Вопрос: гарантирует ли это, что люди, которые знают мой идентификатор проекта и URL БД и т. Д. c. не могу просто читать и записывать данные без моего приложения? Источник находится на GitHub, и GoogleService-Info.plist
и google-services.json
также зафиксированы. (Я провел некоторое исследование, и кажется, что эта информация не является секретной, поскольку она в любом случае доступна в APK и IPA.)
Мои предположения, исправляйте мои, когда я ошибаюсь:
- Хотя к базе данных можно получить доступ, скажем, с помощью Postman, с моим правилом безопасности они должны будут проходить аутентификацию с действительным пользователем, которого знает мой проект Firebase.
- Чтобы добавить пользователей в мою базу данных пользователей Firebase из-за пределов моего приложение, кто-то должен будет использовать информацию о моем проекте и ключи API. Если бы им удалось это сделать, они могли бы просто войти в систему Google с помощью своей учетной записи, которая создаст нового пользователя в моих проектах, и использовать приложение.
- В моем случае это означает, что им потребуется создать iOS или Android приложение, поскольку ключи «ограничены», то есть они разрешены только для определенного типа приложения (iOS и Android здесь). Они не могут использовать ключи API в веб-приложении. (Действительно ли это правда, есть ли какая-либо информация в ключах, чтобы предотвратить, скажем, использование клавиши Android для приложения iOS или наоборот?)
- Это невозможно для Android поскольку я ограничил ключ - злоумышленник должен будет создать приложение Android с тем же именем пакета, что и мое (разрешено), но также должен будет подписать его только с помощью закрытого ключа.
- I ' я не уверен насчет iOS. Я также ограничил ключ, указав свой идентификатор пакета, и он должен быть глобально уникальным при создании устройства, но, честно говоря, я не знаю, должен ли он также быть уникальным для симулятора. В противном случае это означало бы, что кто-то может создать приложение с моим идентификатором пакета, запустить на своем симуляторе, войти в систему с помощью своей учетной записи Google и теперь иметь доступ к данным.
Может ли кто-то подтвердить, что это работает так, как я предполагаю? И уточнить ключи сомнения в № 3 и iOS сомнения в № 5?