2013-06-12 11 views
5

Pracuję nad aplikacją WWW opartą na interfejsie API z niestandardową metodą autoryzacji, która polega na budowaniu łańcucha na podstawie metody żądania, adresu URL, parametrów, publiczny klucz API i kodowany przez prywatny klucz API. Działa to dobrze po stronie serwera, ale po stronie klienta prywatny klucz API (i metoda autoryzacji) będzie narażony na atak. Spędziłem ostatnią godzinę lub tak szukając dobrego sposobu na zabezpieczenie tego klucza API, a najlepszą metodą, jaką mogłem znaleźć, było pośrednictwo przez mój serwer, ale nadal nie jestem pewien w 100% na ten temat.Zabezpieczanie kluczy API na klientach (JavaScript, Android, iOS itp.)

Po pierwsze, czy powinienem się martwić? Chcę uczynić bezpieczeństwo priorytetem w mojej aplikacji internetowej, ale wszystko, co zajmie się modyfikacją konta użytkownika, będzie wymagało tymczasowego, zaszyfrowanego tokena do autoryzacji żądania (oprócz hasha HMAC).

Moje zrozumienie z pośrednictwa proxy polegało na wysłaniu zapytania do serwera, który następnie zaszyfrowałby klucz prywatny i zwrócił informacje. Ale w jaki sposób serwer sprawdzi, czy żądanie pochodzi ze źródła z poprawnym API klawisz?

Czy ktokolwiek może podać wgląd w to, co powinienem zrobić? Czuję, że może to potencjalnie stanowić lukę w zabezpieczeniach każdego kodu po stronie klienta, w tym JavaScript, iOS i Androida.

+1

Proszę [nie używaj podpisów lub sloganów w swoich wpisach] (http://stackoverflow.com/faq#signatures). – meagar

+0

w jaki sposób klucz prywatny byłby podatny na ataki? musisz podać klucz klientowi lub nie zadziała ... – dandavis

+0

Obecnie klientami będą tylko moje oficjalne aplikacje (internetowe i mobilne). Ale klucz prywatny i metoda autoryzacji byłyby widoczne w źródle JavaScript, aby możliwe było wywoływanie AJAX na stronie. – Sam

Odpowiedz

4

Nigdy nie można ufać klientowi. Nawet jeśli się rozwikłasz, ktoś może to rozgryźć. Na przykład przeciwnik może odwrócić algorytm obfuskacji, spojrzeć na pamięć urządzenia, a nawet uchwycić to, co zostało wysłane przez przewód.

Można jednak nadal tworzyć bezpieczną aplikację, wymuszając zabezpieczenia po stronie serwera. Na przykład użytkownicy powinni być uwierzytelniani, aby pomyślnie tworzyć uprzywilejowane żądania interfejsu API.

Ponadto można wymusić użycie interfejsu API po stronie serwera, niezależnie od tego, czy jest to sprawdzanie danych wejściowych, ograniczanie szybkości lub śledzenie adresu IP.

+0

Za każdym razem, gdy wracam do tego, ponieważ ktoś wzniósł to pytanie, widzę "nigdy nie możesz ufać klientowi". Stałem się wielkim fanem tej mentalności i pomógł nawet usprawnić tworzenie niektórych interfejsów API (tj. Nie trzeba rejestrować haseł, ponieważ klient mógłby to udowodnić). – Sam

+0

@sam Potwierdzenie jest dla użytkownika, aby upewnić się, że wpisali to, co myśleli, że wpisali. Mniej prawdopodobne jest błędne wpisanie hasła dwukrotnie w niewłaściwy sposób. –

Powiązane problemy