Лучший способ отслеживать мобильных клиентов, использующих динамические IP-адреса

Мне нужно отслеживать пользователей моего мобильного приложения. Когда они подключены через Wi-Fi, у них есть статический IP-адрес, который никогда не меняется, что упрощает отслеживание. Однако, если они используют свою мобильную сеть, их IP-адреса меняются при каждом запросе, что затрудняет отслеживание.

Мне интересно посмотреть, как другие могли подойти к этой проблеме и внедрить подходящую стратегию отслеживания в этой ситуации?

РЕДАКТИРОВАТЬ: решение должно быть максимально безопасным, чтобы предотвратить отслеживание пользователей.

Спасибо


person Mylo    schedule 20.06.2011    source источник


Ответы (2)


Я предполагаю, что под отслеживанием вы подразумеваете, что веб-служба знает, что два разных запроса исходят от одного и того же пользователя?

Если это так, то вам просто нужно использовать для этого стандартные веб-инструменты: сеансы и файлы cookie.

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

Также обратите внимание: Wi-Fi может дать вам статический IP-адрес внутри сети, к которой подключено устройство, но не в Интернете. Внешний (общедоступный) IP-адрес, который вы можете получить, принадлежит вашему маршрутизатору. В большинстве случаев и у большинства интернет-провайдеров, если соединение по какой-либо причине не удается, маршрутизатор будет иметь новый IP-адрес. Кроме того, если два человека используют один и тот же маршрутизатор для подключения к вашему веб-сервису, у них будет один и тот же общедоступный IP-адрес.

РЕДАКТИРОВАТЬ. Обычный способ обеспечения большей безопасности — это тот, который используется большинством веб-сайтов: UID, используемый для аутентификации пользователя, генерируется веб-сервером (а не приложением) при первом запросе/аутентификации сеанс. Этот UID передается с веб-сервера в приложение, которое затем повторно отправляет его с каждым запросом. Это ограничивает «кражу сеанса» длительностью сеанса. Запросы, которые не отправляют UID или UID, не существующий в базе данных, являются нелегитимными.

EDIT 2: OP добавил в комментарии ниже, что он действительно хочет ограничить количество запросов, сделанных одним пользователем за определенное время. На практике это означает уникальную идентификацию устройства. Один из способов сделать это — вычислить UID на устройстве при первом запуске и сохранить его на устройстве. Затем отправьте этот UID веб-сервису с каждым запросом. Веб-сервис будет нести ответственность за ограничение количества обращений по определенному UID.

Примечание. Будьте внимательны при создании UID. Android как Android_ID, но известно, что он недействителен иногда и со временем меняться. Этот парень, похоже, нашел UID устройства, который сложно подделать:

person Yahel    schedule 20.06.2011
comment
Вы правильно предполагаете, я хочу отслеживать запросы от одного и того же пользователя. Также мне нужно безопасное решение, которое не позволит пользователям обойти отслеживание. Я должен был добавить это к исходному вопросу. - person Mylo; 20.06.2011
comment
Итак, когда пользователь делает запрос на мой сервер, я возвращаю UID с ответом (и записываю его IP вместе с UID?), Я должен что-то упустить, поскольку пользователь может просто изменить свой IP для последующих запросов, чтобы сгенерировать новый УИД? - person Mylo; 20.06.2011
comment
Кажется, я неправильно понял ваш вопрос с самого начала. Возможно, вам следует отредактировать свой вопрос, чтобы попытаться объяснить, что вы пытаетесь сделать. Я думал, вы хотите отслеживать пользователя во время сеанса, чтобы убедиться, что все, что он делает, влияет только на его учетную запись. Но теперь вы, похоже, ищете решение для отслеживания пользователя в течение всего срока службы приложения. Пожалуйста, будьте более конкретными в том, что вы пытаетесь сделать. - person Yahel; 20.06.2011
comment
Извините, я попытаюсь объяснить это лучше. У меня есть веб-служба, которую я хочу ограничить количеством запросов в секунду, которые может сделать любой пользователь, т.е. не более 5 запросов в минуту. Мне нужно найти решение, которое позволит мне отслеживать запросы пользователей и гарантировать, что они не превысят этот предел, даже если их IP-адрес меняется между каждым запросом. - person Mylo; 20.06.2011

Вы должны иметь возможность использовать идентификатор устройства: http://developer.android.com/reference/android/telephony/TelephonyManager.html#getDeviceId()

Изменить: Или создайте UUID при первом запуске приложения, дополнительные предложения и информация здесь: http://android-developers.blogspot.com/2011/03/identifying-app-installations.html

person Stefan H Singer    schedule 20.06.2011
comment
Идентификатор устройства требует разрешения READ_PHONE_STATE, которое я действительно не хочу использовать. Думаю, я мог бы использовать UUID, но его можно было бы легко подделать. Я, вероятно, должен был добавить к своему первоначальному вопросу, что мне также нужно решение, которое трудно обойти пользователям. - person Mylo; 20.06.2011
comment
Если вы знаете, что на всех устройствах есть Wi-Fi, я думаю, вы могли бы сохранить их MAC-адрес, когда он будет доступен. Как ваши пользователи могут легко подделать сгенерированный приложением UUID? - person Stefan H Singer; 20.06.2011