#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, но это только немного усложнит задачу.
Это означает, что у вас есть четыре возможности:
-
Вообще не подключайтесь к внешней базе данных.
-
Используйте какой-нибудь промежуточный сервер. Это будет означать, что любой может использовать вашу базу данных через этот сервер, но сервер, по крайней мере, может ограничить доступ к этой базе данных.
-
Не сохраняйте никаких учетных данных, но запрашивайте их у пользователя.
-
Храните учетные данные в apk и позволяйте всем использовать вашу базу данных.