Jak upewnić się, że zapytania API pochodzą z naszej aplikacji mobilnej (ios/android)?

Budujemy aplikację mobilną i chcemy wdrożyć jakiś rodzaj uwierzytelniania, aby upewnić się, że API jest dostępne tylko dla naszej aplikacji. Użytkownicy aplikacji są anonimowi, bez logowania, chociaż identyfikuję ich za pomocą identyfikatora urządzenia do utrzymywania ustawień i tym podobnych.

Najprostszym podejściem wydaje się Generowanie klucza Guid / API, który wysyłam przy każdym żądaniu przez SSL.

Martwi mnie możliwość, że złośliwa osoba z dużą ilością wolnego czasu pobierz aplikację, dekompiluj ją, aby uzyskać klucz API i żądania JSON, a następnie wyczyść moją bazę danych, jak najlepiej mogą.

Czy SSL, klucz API, identyfikator urządzenia i API z jak najbardziej ograniczonymi wywołaniami są wystarczająco dobre? Powinienem podejść inaczej? Czy moje obawy są uzasadnione czy bezpodstawne?

Author: Donald Hughes, 2012-03-22

1 answers

Nie osadzaj pojedynczego klucza API w aplikacji. Twoje obawy są ważne w odniesieniu do skutków szkodliwych użytkowników. Ponadto w bieżącej konfiguracji masz poważną lukę, w której złośliwy użytkownik API może zmienić preferencje innych użytkowników, podając fałszywe identyfikatory UDID.

Zamiast tego utwórz usługę "rejestracja", która jest wywoływana przy pierwszym uruchomieniu aplikacji na urządzeniu, które generuje i zwraca GUID na podstawie UDID. Przechowuje identyfikator GUID w lokalnych preferencjach użytkownika urządzenia i na serwerze. Śledź identyfikator GUID i dopasuj go do UDID przy każdym żądaniu na serwerze.

Upewnij się, że wszystko to odbywa się przez SSL.

W tym podejściu nie ma wbudowanego klucza głównego API, który można nadużywać. Ponadto możesz umieścić na czarnej liście agresywnych użytkowników, oznaczając kombinacje GUID/UDID, a także wyeliminować istniejący problem potencjalnej maskarady istniejących zarejestrowanych urządzeń. Nie można jednak zapobiec złośliwej rejestracji urządzeń, które jeszcze nie zarejestrowany w Twoim serwisie. Zawsze będzie to potencjalne zagrożenie związane z użyciem identyfikatora urządzenia jako identyfikatora użytkownika.

Istnieją jeszcze lepsze i bardziej ugruntowane mechanizmy uwierzytelniania, które przyjmują lepsze podejście, tj. OAuth, JSessionIDs itp. powinieneś się temu przyjrzeć.

Również w przyszłości nie powinieneś używać UDID do identyfikacji użytkowników, ponieważ dostęp do niego został wycofany. Możesz naśladować UDID do swoich celów, tworząc Niestandardowy identyfikator GUID urządzenia na urządzenie po instalacji aplikacji i zapisaniu go w lokalnych preferencjach użytkownika.

 18
Author: Peter Cetinski,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-03-22 15:06:37