Подтвердить что ты не робот

Как убедиться, что запросы API поступают из нашего мобильного приложения (ios/android)?

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

Самый простой подход - это создание ключа Guid/API, который я отправляю с каждым запросом через SSL.

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

Достаточно ли SSL, Ключ API, Идентификатор устройства и API с достаточно ограниченными вызовами? Должен ли я придерживаться другого подхода? Являются ли мои опасения обоснованными или необоснованными?

4b9b3361

Ответ 1

НЕ вставляйте один ключ API в приложение. Ваши опасения относятся к действию вредоносных пользователей. Кроме того, у вас есть серьезная уязвимость в вашей текущей настройке, где вы могли бы использовать вредоносного пользователя API для изменения других пользовательских настроек, предоставляя поддельные UDID.

Вместо этого создайте службу регистрации, которая вызывается при первом запуске приложения на устройстве, которое генерирует и возвращает GUID на основе UDID. Сохраните GUID в настройках локального пользователя и на сервере. Следите за GUID и сопоставляйте его с UDID по каждому запросу на вашем сервере.

Убедитесь, что все это происходит через SSL.

При таком подходе отсутствует встроенный мастер-ключ API для злоупотребления. Кроме того, вы можете использовать черный список оскорбительных пользователей, помещая комбинации GUID/UDID, и вы также можете устранить существующую проблему потенциального маскирования существующих зарегистрированных устройств. Однако вы не можете предотвратить вредоносную регистрацию устройств, которые еще не зарегистрированы в вашей службе. Это всегда будет потенциальной угрозой использования идентификатора устройства в качестве идентификатора пользователя.

Существуют еще лучшие и более проверенные механизмы аутентификации, которые лучше подходят, т.е. OAuth, JSessionID и т.д., На которые вы должны обратить внимание.

Кроме того, в будущем вы не должны использовать UDID для идентификации своих пользователей, поскольку доступ к нему устарел. Вы можете имитировать UDID для своих целей, создав GUID пользовательского устройства на устройстве при установке приложения и сохранив его в настройках вашего локального пользователя.