Android: насколько безопасна база данных, упакованная с приложением - PullRequest
10 голосов
/ 26 сентября 2011

Я хочу знать, насколько безопасно упаковать базу данных с приложением в Android. Могут ли пользователи легко получить доступ к базе данных? Поскольку база данных, которая у меня есть, будет содержать данные, которые я не хочу взламывать пользователями за неправильное использование, каков наилучший способ защиты базы данных в мобильных приложениях?

Также мое приложение будет использовать веб-сервис (связываясь с моим собственным сайтом), например. HTTP: \ www.mysite.com/services/xxx

Мой сайт, в свою очередь, вернет некоторые данные в мобильное приложение. Если кто-то декомпилирует код Java (в apk), он легко получит доступ к URL-адресу, который я использую для веб-службы. Как я могу защитить свои данные на сайте от атак злоумышленников. Если кто-то узнает URL-адрес, он может просто набрать этот URL-адрес в браузере и получить все данные в формате json, которые мне не нужны, так как эти данные могут быть весьма конфиденциальными. Даже если я сохраню его в кодировке, пользователь сможет узнать кодировку из кода Java (который он получает после декомпиляции apk).

Как защитить мою БД от неправильного использования?

Если мое приложение предназначено для отображения локальных мест, таких как рестораны, бары и т. Д. На мобильных устройствах, я должен всегда получать их с веб-сайта с помощью веб-службы или предоставлять локальную базу данных с этими сведениями, чтобы можно было быстро получать информацию. В этом случае я могу предоставить веб-сервис UPDATE, который обновит локальную базу данных. Но безопасность локальной БД для меня очень важна.

Может кто-нибудь подсказать, где хранить БД и как ее защитить?

Rgds, Sapan

Ответы [ 3 ]

8 голосов
/ 26 сентября 2011

Локальные базы данных и ваш файл apk могут быть легко прочитаны любым корневым устройством. Этот инструмент может даже декомпилировать ваши ресурсы, как объяснено в этом руководстве по YouTube (я сам никогда этого не пробовал).

Так что вам придется хранить данные в зашифрованном виде вбазу данных и расшифруйте ее из кода приложения, чтобы быть уверенным, что никто не сможет получить к ней доступ, просто получив базу данных из каталога data своего устройства.

Вы не должны помещать свои конфиденциальные данные (например, пароли и т. д.).) в папке ресурсов, поскольку его можно декомпилировать, поместите его в свой код.

Теперь несколько слов о вашем JSON API.Недостаточно скрыть URL-адрес, поскольку пользователь может легко отслеживать ваши запросы с помощью анализатора и в любом случае получить его.Вы должны предоставить механизм аутентификации для защиты от несанкционированного доступа, а также для защиты вашего общения по SSL.(Например, использование HTTP-аутентификации - имеет смысл только тогда, когда ваш сервер предоставляет SSL.)

Это то, о чем вы должны подумать и сами решить, насколько конфиденциальны ваши данные на самом деле.

2 голосов
/ 26 сентября 2011

Насколько я понимаю, вы собираетесь:

  1. Упаковать исходную БД в файл APK (скажем, с папкой res / asset)
  2. Во время первого запуска разнесите файл БДиз res / asset в папку данных приложения
  3. Затем время от времени извлекайте данные в БД с веб-сайта / webservice

В этом случае в основном существует 2 уязвимости (я имею в виду хранимые данные):

  1. Исходное изображение БД, поскольку оно упаковано в APK (который в действительности является просто ZIP-архивом), поэтому любой может распаковать и посмотреть, что упаковано в файл БД
  2. , хранящийся в БДпапка с данными приложения (обычно / data / data / MY_APPLICATION_PACKAGE / database).Эта папка доступна на рутированном устройстве, поэтому ваши данные снова могут быть легко экранированы

Единственный способ защиты - шифрование содержимого базы данных.Самый простой способ сделать это для хранения конфиденциальных данных в BLOB (в форме XML JSON) и шифровать / дешифровать эти BLOB после / до фактического использования определенных записей.

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

1 голос
/ 26 сентября 2011
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...