2010-11-05 2 views
4

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

Каков наилучший способ сделать это?

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

ответ

1

Проще всего использовать HTTPS с аутентификацией.

Отредактировано:

Вопрос здесь не в том, чтобы обеспечить доступ к серверам, но как скрыть/безопасные учетные данные (пароли/сертификаты/и т.д ..) на Android телефонов. Вопрос должен быть: как скрыть данные в приложениях Android.

Одним из решений является использование обфускатора, такого как ProGuard.

+1

Это не самый простой (который был бы агент пользователя), и он далеко не обеспечен. – Guillaume

+0

Услуги JSON не заботятся о пользователе-агенте. Пользовательский агент полезен только при возврате html в браузер. Кстати, вы все равно можете установить пользовательский агент с HttpClient. –

+0

HTTPS безопасен - внешние стороны не могут на него обходить. И если он использует аутентификацию с именем пользователя/паролем, то другие не могут подключиться к нему. –

1

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

Нет полностью защищенного способа делать то, что вы пытаетесь сделать. Но есть способы ограничить клиентов, даже если они не являются надежными.

Простейшим (и наименее защищенным) было бы ограничение доступа на основе пользовательского агента. Но любой клиент может подделать пользовательский агент.

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

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

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

+1

Имя пользователя/пароль через HTTPS - это единственный безопасный способ сегодня. Это то, что используют самые крупные онлайн-сервисы (gmail, yahoo и т. Д.). –

2

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

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

+0

«Включите в свой приложение некоторые скрытые сертификаты/учетные данные, разные для каждого загруженного приложения». Не могли бы вы рассказать об этом? Есть ли у вас пример или ссылки для иллюстрации того, как это можно сделать? – netguy

+0

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

Смежные вопросы