Android: насколько безопасна база данных, упакованная с приложением
Я хочу знать, насколько безопасно упаковывать базу данных с помощью приложения в android. Доступ к базе данных может быть легко доступен пользователям? Поскольку у базы данных, которая у меня есть, будут данные, которые я не хочу взломать пользователями за неправильное использование, что лучший способ защитить базу данных в мобильных приложениях?
Также мое приложение будет использовать веб-сервис (связавшись с моим собственным сайтом), например. HTTP:\www.mysite.com/services/xxx
Мой сайт, в свою очередь, вернет некоторые данные в мобильное приложение. Если кто-то декомпилирует java-код (в apk), он легко получит доступ к URL-адресу, который я использую для веб-службы. Как я могу защитить свои данные на веб-сайте, чтобы атаковать злоумышленники. Если кто-то узнает URL-адрес, он может просто ввести этот URL-адрес в браузере и получить все данные в формате json, которые я не хочу, поскольку эти данные могут быть весьма чувствительными. Даже если я сохраню его в кодировке, пользователь сможет узнать кодировку из java-кода (который он получает после декомпиляции apk).
Как защитить мою БД от неправильного использования?
Если мое приложение должно показывать локальные места, такие как рестораны, бары и т.д. на мобильных устройствах, я должен всегда извлекать их с веб-сайта с помощью веб-службы или предоставлять локальную базу данных с этими подробностями, чтобы можно было быстро получить информацию. В этом случае я могу предоставить веб-службу UPDATE, которая будет обновлять локальную базу данных. Но безопасность локальной БД меня очень беспокоит.
Кто-нибудь может предложить, где хранить БД и как его защитить?
Rgds,
Sapan
Ответы
Ответ 1
Локальные базы данных и ваш файл apk могут быть легко прочитаны любым корневым устройством. Этот инструмент может даже декомпилировать ваши ресурсы, как описано в этот учебник по youtube (Я никогда не пробовал это на самом деле).
Таким образом, вам нужно будет хранить ваши данные, зашифрованные в вашей базе данных, и расшифровать их из вашего кода приложения, чтобы убедиться, что никто не может получить к нему доступ, просто получив базу данных в каталоге data
своего устройства.
Вы не должны помещать свои конфиденциальные данные (например, пароли и т.д.) в папку ресурсов, потому что их можно декомпилировать, поместить в свой код.
Теперь несколько слов к вашему JSON API. Скрыть URL-адрес недостаточно, так как пользователь может легко отслеживать ваши запросы с помощью сниффера и получить его в любом случае. Вы должны предоставить механизм аутентификации для защиты неавторизованного доступа, а также защитить свою связь с помощью SSL. (Например, используя HTTP-аутентификация - имеет смысл, когда ваш сервер предоставляет SSL.)
Это то, о чем вам следует подумать, и решить, насколько чувствительны ваши данные на самом деле.
Ответ 2
Насколько я понимаю, вы собираетесь:
- Загрузите исходную БД в файл APK (скажем, с папкой res/asset)
- Во время первого запуска взорвать файл DB из папки res/asset в папку данных приложения
- Затем с момента получения данных в БД с веб-сайта/веб-службы
В этом случае есть в основном 2 уязвимости (я имею в виду хранимые данные):
- Исходное изображение БД, так как оно упаковано с APK (которое в действительности представляет собой ZIP-архив), поэтому любой может распаковать и посмотреть, что упаковано в вашем DB
- Файл DB, хранящийся в папке данных приложения (обычно/data/data/MY_APPLICATION_PACKAGE/databases). Эта папка доступна на корневом устройстве, поэтому ваши данные могут быть легко экранированы.
Единственный вариант, который нужно защитить, - это зашифровать содержимое базы данных. Самый простой способ сделать это, чтобы хранить конфиденциальные данные в BLOB (в форме XML JSON) и шифровать/дешифровать эти BLOB после/до фактического использования определенных записей.
Я лично сделал это в своем приложении - и он работает хорошо.
Ответ 3
проверьте эти ссылки для защиты файла apk для декомпиляции
Как сделать apk Secure. Защита от декомпиляции
Защита Android apk для предотвращения декомпиляции, сетевого обнюхивания и т.д.
декомпилировать DEX в исходный код Java