Firebase/firestore — отличный бэкенд, так как его очень просто внедрить в мобильное приложение. После добавления зависимостей в приложение и предоставления имени пакета приложения в firebase вы в значительной степени настроены. Но есть риск. Неправильное выполнение правил безопасности может привести к серьезному взлому, который я покажу в этой статье.

Давайте посмотрим на официальную документацию о том, как хранить данные пользователей:

Давайте создадим простую базу данных пользователей с демонстрационными данными. приложение будет написано на Java и будет реализовывать простую структуру для получения местоположения пользователя и записи его в firestore. Данные будут храниться в коллекции «данные» и в документе, соответствующем электронной почте пользователя.

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

И вот как мы собираемся установить String userEmail в самом приложении:

Теперь давайте запишем данные в firestore:

И после успешной записи давайте прочитаем данные в приложении, инициализировав метод readData:

Итак, все выглядит нормально, и в базе данных есть правильные данные:

Итак, давайте предположим, что пользователей и, следовательно, документов намного больше, и мы знаем, что наш друг использует это приложение со своей электронной почтой [email protected]. Но поскольку мы можем только читать наши собственные данные, поскольку документ всегда устанавливается как электронная почта вошедшего в систему пользователя, нет никакого способа получить доступ к его данным. Или есть? Давайте погрузимся в apktool и декомпилируем окончательный apk. Я использую дистрибутив Kali Linux для этого:

Приложение декомпилировано, поэтому теперь мы открываем файл .smali и пытаемся найти нужную ссылку на документ:

Мы не хотим, чтобы документ был установлен на userEmail, поэтому давайте заменим его вручную на строку электронной почты, из которой мы хотим прочитать данные, а затем перекомпилируем apk:

Теперь нам нужно его подписать, иначе он не установится на устройство:

Теперь, когда приложение установлено, мы можем читать данные [email protected]!

Итак, пришло время поговорить о том, как это предотвратить. Это очень просто: всегда проверяйте, кто имеет доступ к данным, устанавливая правило безопасности и присваивая документу userUID. userUID не будет храниться нигде на устройстве, его будет слишком сложно взломать, и он будет проверен правилом безопасности ниже!

Спасибо за ваше время, и счастливого и безопасного кодирования!