Вы интегрировали крутое платное API (например, карты или ИИ). Где вы храните секретный
API_KEY?Если ваш ответ: «В файле
Constants.kt», «в strings.xml» или «просто текстом в классе» - у меня для вас плохие новости.Любой школьник может скачать ваш APK или IPA файл, разархивировать его и достать ваши ключи за 5 минут с помощью базовых утилит для реверс-инжиниринга. А потом вы получите счет от сервиса на 10 000$ за чужой трафик.
То же самое касается пользовательских токенов (
Bearer token). Если вы сохранили его в обычный SharedPreferences или UserDefaults - считайте, что вы написали пароль на стикере и приклеили его на монитор в коворкинге.🛡 Как делают Мидлы (Защита секретов):
1. Правило №1: Никогда не пушьте ключи в Git!
Даже в приватный репозиторий. Используйте локальные файлы
local.properties (Android) или .xcconfig (iOS), которые обязательно должны быть добавлены в .gitignore.2. Токены пользователей (Авторизация):
• 🤖 Android: Забудьте про голый
SharedPreferences. Используйте EncryptedSharedPreferences из библиотеки AndroidX Security. Он работает точно так же, но аппаратно шифрует ключи и значения через систему Android Keystore.• 🍏 iOS: Никаких
UserDefaults для токенов. Только Keychain. Данные в Keychain аппаратно зашифрованы на уровне операционной системы (Secure Enclave) и недоступны другим приложениям.3. Глобальные API-ключи (Как их прятать):
• Уровень "Нормально": Пробрасывать ключи во время сборки через CI/CD (GitHub Actions) прямо в
BuildConfig. Это уберет ключи из исходников, хотя и не защитит от декомпиляции готового приложения на 100%.• Уровень "Параноик" (Android): Прятать ключи в C++ коде через NDK (Native Development Kit). Декомпилировать нативную C-библиотеку (
.so) в десятки раз сложнее, чем байт-код Java/Kotlin.• Уровень "Бог": BFF (Backend for Frontend). Приложение вообще не знает никаких сторонних ключей. Оно делает запрос на ВАШ сервер, а уже ваш сервер безопасно подставляет секретный ключ и идет в стороннее API.
💡 Главный совет: Относитесь к любому мобильному приложению как к потенциально скомпрометированной среде. То, что ушло на устройство пользователя, вам больше не принадлежит.
#security #android #ios #keychain #keystore #middle #development
👉 @developer_mobila
