Безопасны ли мои пароли в apk

#android #database

#Android #База данных

Вопрос:

Допустим, я хочу получить доступ к онлайн-базе данных из своего приложения для Android. Мне нужно будет ввести свое имя пользователя и пароль. Но безопасны ли мои учетные данные, если я это сделаю? Возможно ли, чтобы хакер декомпилировал мой apk и получил пароль, например? Если это небезопасно, что мне делать, отправить запрос php-скрипту на частном сервере?

Комментарии:

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

Ответ №1:

2 вещи:

-Никогда не подключайтесь к базе данных напрямую из приложения для Android. Это считается плохой практикой, и по уважительным причинам вы потенциально можете предоставлять запросы и другую информацию / код, если кто-то отменит ваш apk, но есть и другие причины…

Вместо этого используйте службу REST: с клиента вы будете отправлять http-запросы только определенным файлам сервера / сервлету, которые будут извлекать необходимую вам информацию (обычно с использованием JSON) из базы данных или других источников. Вы также можете пройти аутентификацию с помощью этого средства, используя форму POST.

-Ваши учетные данные будут защищены от обратного проектирования (в основном потому, что они не жестко закодированы …), но потенциально могут быть отозваны через точки доступа путем фишинга в вашем соединении.

По этой причине лучше использовать кодирование перед отправкой этих учетных данных на сервер. Вы должны легко найти поддержку md5 или SHA по умолчанию.

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

Комментарии:

1. Хорошо, спасибо, если я использую MongoDB, доступны ли какие-либо службы REST?

2. Не знаком с MongoDB, но обычно дизайн REST довольно прост (и не требует пояснений), и если не иметь дело с очень сложными решениями, для которых требуется многоуровневая архитектура, я бы не рекомендовал какой-либо конкретный API по этому вопросу … (за исключением, может быть, PUSH). Если все, что вам нужно сделать, это получить данные базы данных или запросы, гораздо более рекомендуется делать это с нуля.

3. Хорошо, понял. Итак, если бы я хотел получить информацию о пользователе в виде файла JSON, мне пришлось бы вызвать script.php?user =bob этот скрипт выполняет всю тяжелую работу

4. Точно, от клиента просто используйте http-запрос с данными post / get, затем извлеките JSON, обслуживаемый файлом php, который обращается к базе данных.

5. Нет проблем, спасибо вам за CA. Помните, что также рекомендуется шифровать / расшифровывать учетные данные пользователя / пароля во время http-запроса, чтобы затруднить поиск точек доступа. Рад, что это помогло.

Ответ №2:

1) это не «небезопасно», это опасно.
2) даже такой глупый человек, как я, может декомпилировать apk, не говоря уже о реальном хакере
3) одним из возможных решений является реализация аутентификации пользователя. на самом деле, это зависит от того, что вы хотите сделать на самом деле

Ответ №3:

Нет, они небезопасны в APK — его тривиально декомпилировать. Отправка его через веб-службу HTTPS намного безопаснее. Но на самом деле, вы не хотите напрямую обращаться к БД из своего приложения — это угроза безопасности, вам нужно разрешить вашей БД открытый порт для выхода в Интернет. Вместо этого вы должны использовать веб-сервис для передачи данных в ваше приложение. Таким образом, только веб-сервер имеет прямой доступ к БД, брандмауэр может изолировать остальной Интернет.

Комментарии:

1. Итак, что мне нужно сделать, это отправить запрос на mysite / dataaccess.php?user=fooamp;pass=bar и получить файл JSON с информацией о моем пользователе?

Ответ №4:

Если вы собираетесь сохранять свои учетные данные в приложении как жестко запрограммированные для проверки, это всегда может быть вредным. но если вы используете JSON или некоторые другие веб-сервисы и отправляете свои учетные данные для проверки на сервер. Тогда они более надежны, чем сохранение их в самом вашем приложении. Пусть проверка выполняется в PHP-скрипте на сервере, а не в вашем приложении.

Ответ №5:

Выполните базовую аутентификацию —

Как упоминалось в httpclient-4-basic-authentication,

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

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

 HttpHost targetHost = new HttpHost("localhost", 8080, "http");
CredentialsProvider credsProvider = new BasicCredentialsProvider();
credsProvider.setCredentials(AuthScope.ANY, 
new UsernamePasswordCredentials(DEFAULT_USER, DEFAULT_PASS));

AuthCache authCache = new BasicAuthCache();
authCache.put(targetHost, new BasicScheme());

// Add AuthCache to the execution context
final HttpClientContext context = HttpClientContext.create();
context.setCredentialsProvider(credsProvider);
context.setAuthCache(authCache);
  

Для лучшего хранения учетных данных используйте AccountManager.

Как упоминалось в официальных документах разработчиков —

Этот класс предоставляет доступ к централизованному реестру онлайн-учетных записей пользователя. Пользователь вводит учетные данные (имя пользователя и пароль) один раз для каждой учетной записи, предоставляя приложениям доступ к онлайн-ресурсам с одобрением «одним щелчком мыши».

Подробнее читайте советы по безопасности.

Ответ №6:

Если ваше приложение может выполнять что-либо без предоставления пользователем учетных данных, это может сделать любой, у кого есть доступ к файлу apk. Поэтому, если ваше приложение взаимодействует с некоторыми базами данных, хранилищами или чем-то еще, любой может получить к ним доступ.

Вы можете попробовать некоторые методы, чтобы скрыть пароль в apk, но это только немного усложнит задачу.

Это означает, что у вас есть четыре возможности:

  1. Вообще не подключайтесь к внешней базе данных.

  2. Используйте какой-нибудь промежуточный сервер. Это будет означать, что любой может использовать вашу базу данных через этот сервер, но сервер, по крайней мере, может ограничить доступ к этой базе данных.

  3. Не сохраняйте никаких учетных данных, но запрашивайте их у пользователя.

  4. Храните учетные данные в apk и позволяйте всем использовать вашу базу данных.