Wyobraźmy sobie problem: Mam usługę REST, która jest implementowana za pomocą technologii Java/MySQL/Spring i HTTP/JSON. Klientami usługi REST są aplikacje mobilne. Jest więc możliwe, że ktoś zdekompiluje kod i otrzyma interfejs API usługi REST. (Tak, kod jest zaciemniony itp., Ale tak).Warunki usługi i wyścigu REST
Problem: istnieje metoda POST wysyłania pieniędzy do innego użytkownika aplikacji. Martwię się, że ktoś może uzyskać API, napisać bota i wysłać żądanie POST 500 lub 5000 lub nawet 50 000 razy na sekundę. W rezultacie może wysłać więcej pieniędzy niż ma, ponieważ jeśli 1000 zgłoszeń jest przetwarzanych jednocześnie, sprawdzanie salda może być udane dla wszystkich 1000 zgłoszeń, jednak prawdziwa kwota na koncie może być wystarczająca tylko dla, powiedzmy, 50 wniosków.
Zasadniczo bardziej przypomina standardową "rasę" z wieloma wątkami. Problem polega na tym, że mam wiele serwerów i nie są one ze sobą powiązane. Tak więc, 300 żądań może przyjść do serwera A, 300 żądań może przyjść do serwera B, a żądania reszty mogą przyjść na serwer C.
Najlepszym pomysłem jaki mam, jest użycie czegoś takiego jak "WYBIERZ ... DO AKTUALIZACJI" i synchronizuj na poziomie bazy danych. Chciałbym jednak rozważyć inne rozwiązania.
Wszelkie pomysły lub sugestie?
Nie masz loginy, sesje i anty-CSRF tokeny w celu zapewnienia, że żądania transferu może pochodzić tylko z zalogowany, Autoryzowany użytkownik? Czy nie masz kontroli autoryzacyjnych, aby upewnić się, że tylko żądania przekazania własnych pieniędzy są przestrzegane? Czy nie masz aplikacji trójwarstwowej, więc interfejs obsługuje tylko warstwę prezentacji, a logika biznesowa jest obsługiwana za kulisami? Czy nie masz możliwości segmentowania przetwarzania dla podobnych żądań (ten sam donator, ten sam cel itp.) Na jednym serwerze logiki biznesowej? – atk
W jaki sposób logowanie/sesje mogą temu zapobiec? Jeśli ktoś włamie się do API, może zhackować logowanie/sesję i wysłać to żądanie przy użyciu prawidłowego mechanizmu uwierzytelniania. Nawiasem mówiąc, uwierzytelnianie jest oparte na tokenie, tj. OAuth. Jest to usługa REST i nie używam tokenów csrf. – user3489820
Jeśli ludzie logują się i ograniczają rzeczy, aby ludzie mogli wydawać tylko własne pieniądze, zapobiegają atakom, w których osoba atakująca wyda pieniądze innej osoby. Nie przeszkadza im to w nadmiernym robieniu własnego konta, ale uniemożliwia to nadpisanie * konta innej osoby *. – atk