Когда дело доходит до разработки мобильных приложений, безопасность может казаться проблемой кого-то другого… но это не так. Как разработчики, мы не всегда имеем опыт в криптографии или информационной безопасности, но мы на переднем крае защиты пользовательских данных. Создаёте ли вы финтех-приложение или простой инструмент для повышения производительности, эти рекомендации помогут снизить риски и укрепить доверие.
Хранение данных: минимизация и шифрование
Не храните то, что не хотите раскрывать.
- Используйте
EncryptedSharedPreferencesилиEncryptedFileиз AndroidX Security вместо обычного SharedPreferences для хранения конфиденциальных данных, таких как токены или персональные данные. - Избегайте утечек или регистрации пользовательских данных в таких системах, как New Relic или других инструментах мониторинга.
- Используйте хранилище Keystore для кастомного шифрования файлов, больших двоичных объектов или потоков данных.
- Для временных данных предпочтительнее кэширование в оперативной памяти, а не запись на диск.
- Избегайте утечек памяти: утечки контекстов или долгоживущие ссылки могут непреднамеренно раскрыть конфиденциальные данные в памяти. Используйте такие инструменты, как LeakCanary, для их обнаружения и устранения.
Сетевое взаимодействие: безопасность по умолчанию
Каждый запрос — это потенциальное направление для атаки.
- HTTPS с TLS 1.2+.
- Закрепите свои сертификаты с помощью таких инструментов, как TrustKit или CertificatePinner от OkHttp. В приложении KMP вы можете использовать Ktor — технологии могут меняться, но это тема для другой статьи.
- Удаляйте конфиденциальные заголовки или полезную нагрузку из логов в рабочей среде.
- Избегайте отправки ролей или разрешений пользователей в параметрах URL — используйте вместо этого защищенные файлы cookie или заголовки для управления доступом и идентификацией на стороне сервера.
Аутентификация и управление сеансами
Слабая аутентификация = неисправное приложение, каким бы хорошим ни был пользовательский интерфейс. Аутентификация — очень сложная инженерная задача, и даже лучшие из лучших иногда не справляются с ней как следует. Убедитесь, что вы освоили хотя бы основы.
- Само собой разумеется. Никогда не храните пароли или токены доступа в виде обычного текста.
- При необходимости используйте биометрическую аутентификацию (BiometricPrompt).
- Убедитесь, что сеансы истекают после бездействия или выхода из системы. Вы даже можете использовать кратковременные токены, регулярно их менять и аннулировать при выходе из системы или подозрительной активности.
Избегайте реверс-инжиниринга и уязвимостей WebView
Если что-то легко декомпилировать, это легко взломать.
- Включите R8/ProGuard и обфусцируйте всё, что возможно.
- ProGuard может быть недостаточным для вашего сценария использования. Рассмотрите возможность использования DexGuard для защиты от реверс-инжиниринга (он платный).
- Удалите все логи BuildConfig.DEBUG и тестовые флаги в производственных сборках. Рассмотрите возможность использования таких инструментов, как AppShielding или Play Integrity API, для обнаружения взлома или устройств с root-доступом.
- Используйте уникальные ключи API для каждой платформы/варианта сборки, чтобы минимизировать ущерб от потенциальных утечек. В целом, это очень распространенная проблема.
- Будьте осторожны с WebView: избегайте включения JavaScript любой ценой. Извините, без извинений. Просто не делайте этого.
Защитите свой конвейер CI/CD
Ваше приложение защищено ровно настолько, насколько безопасен ваш процесс сборки.
- Не храните конфиденциальные секреты в системе контроля версий — используйте GitHub Actions/секреты Bitrise.
- Регулярно запускайте инструменты статического анализа (например, MobSF).
- Автоматизируйте сканирование уязвимостей в рамках своего конвейера (например, проверку зависимостей, SonarQube).
Хотите узнать больше?
Продолжите чтение здесь:
Уже чувствуете себя в безопасности?
Безопасность — это не знание всего, а умение задавать правильные вопросы и устанавливать разумные значения по умолчанию. Всего несколько продуманных шагов помогут вам значительно повысить безопасность вашего приложения для пользователей.
Если вы не знаете, с чего начать, выберите одну область из списка выше и улучшите её в следующем спринте.
Прогресс превыше совершенства.

