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 после/до фактического использования определенных записей.

Я лично сделал это в своем приложении - и он работает хорошо.