• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Jak ograniczyć dostęp do API

Object Storage Arubacloud
+2 głosów
682 wizyt
pytanie zadane 8 kwietnia 2023 w PHP przez michal Mądrala (5,560 p.)
Cześć. Chcę zrobić mały portal który będzie stał na standardowym hostingu. Myślałem o laravel i na froncie react, lub angular. Na stronie chciałbym wyświetlać listę elementów pobieranych z bazy, które będą ogólno dostępne (bez logowania).  Dodatkowo chciałbym te dane wykorzystać w następnej kolejności w aplikacji android.

Mam jednak pytanie jak zabezpieczyć API, żeby zwracało dane tylko dla moich aplikacji ( serwis react/angular i andrid).  Mimo to, że dane będą ogólno dostępne to nie chciał bym, aby ktoś mógł wysyłać żądania i dostawał odpowiedzi z tego API

3 odpowiedzi

+5 głosów
odpowiedź 8 kwietnia 2023 przez Gynvael Coldwind Nałogowiec (27,990 p.)
TL;DR: nie da się :)

Jak byś na to nie patrzył, będziesz musiał włożyć klucz do API do aplikacji. To znaczy, że dowolna osoba, która pobierze aplikacje będzie mogła ten klucz wydobyć. Wszelkie próby ukrycia klucza API w aplikacji, tak żeby trudno było się do niego dostać ostatecznie i tak co najwyżej kupią Ci kilka godzin czasu / odstraszą początkujące osoby. I trzeba by się naprawdę nieźle namęczyć żeby te kilka dni przekuć w kilka godzin (z drugiej strony Ciebie jak twórcę będzie kosztować to tygodnie pracy, żeby te kilka godzin kupić).

Możesz oczywiście próbować ograniczyć (spowolnić) dostęp do API od danego użytkownika (np. IP+user agent?), ale to jest bardzo bardzo łatwo spoofnąć, tak, żeby każde żądanie wyglądało jakby pochodziło od innej osoby (np. korzystając z TORa albo zmieniając user agent). Co więcej, to okazałoby się problematyczne dla realnych użytkowników, którzy mają to samo IP / popularne w danym miejscu urządzenie.

Co więcej, jeśli dane są dostępne przez stronę bez logowania, to można sobie bardzo szybko napisać jakiś scraper do nich, który będzie chodził po stronie i wyciągał dane. API do tego nie potrzeba, a kod do tego jakiś LLM napiszę w kilka chwil.

Możesz próbować się prawnie zabezpieczyć, ale nic nie zrobisz ze scapperami z losowego innego państwa, w którym np. prawo nie chroni publicznie udostępnionych informacji.

 

Podsumowując: Możesz próbować robić różne nieskuteczne rzeczy, ale ostatecznie pomyśl raczej jak podejść do problemu w taki sposób, żeby zescrapowanie bazy nie było dla Ciebie problematyczne.
komentarz 8 kwietnia 2023 przez Artur Koniec Gaduła (3,680 p.)
No jak się nie da? CORS?
2
komentarz 8 kwietnia 2023 przez Gynvael Coldwind Nałogowiec (27,990 p.)
edycja 8 kwietnia 2023 przez Gynvael Coldwind

Dla wyjaśnienia, zanim ktoś sie zasugeruje:

CORS jest odwrotnym mechanizmem, tj. to jest mechanizm, który w obrębie środowiska przeglądarek internetowych pozwala na udostępnienie API innym stronom. Patrz nazwa: Cross-Origin Resource Sharing, czyli "dzielenie zasobów pomiędzy 'stronami'" ("strona" nie jest prawidłowym tłumaczeniem słowa origin, ale mniej więcej na to samo wychodzi).

Bez użycia CORS w obrębie środowiska przeglądarek internetowych strona z originem X nie będzie miała pełnego dostępu do serwera Y z uwagi na Same-Origin Policy. Zdefiniowanie polityk CORS otwiera ten dostęp na wybrane lub wszystkie inne originy.

Kluczowe w tym jest to co napisałem boldem, czyli w obrębie środowiska przeglądarek internetowych. Poza przeglądarkami nie ma Same-Origin Policy i dowolne narzędzie (np. curl) może sobie wysyłać dowolne pakiety HTTP (w tym dowolnie spoofować nagłówek "Origin:", nagłówek "Referer", etc).

Podsumowując: nie, CORS nie pomaga w kwestii opisanej w tym temacie w żadnym stopniu.

1
komentarz 8 kwietnia 2023 przez Artur Koniec Gaduła (3,680 p.)
Dzięki za wytłumaczenie :)
komentarz 8 kwietnia 2023 przez Wiciorny Ekspert (272,210 p.)

@Gynvael Coldwind,  można by to rozwiązać z API Gateway, które będzie sprawdzac, czy request z danego "hosta' może zostać wysłany i dopuścić do źródła, nawet z wykorzystaniem load balancera. Tak przynajmniej rozumiem, co autor chce uczynić. 

Jeszcze myślałem, ale to już nie takie proste, aby walidacja hostów np, domeny opierała się o proxy-rule, ale to dalej być może nie bardzo rozumiem, co autor ma na myśli jak blokada dostępu do publicznego zasobu, gdzie z definicji publiczny jest dla wszystkich.

Chociaż mechanizm który bazuje np, na autoryzacji i dostępie do zasobu REGIONOWY, możnaby usilnie próbować rozwiązać  w podobny sposób, tylko podstawowe pytanie się brzmi - co byłoby czynnikiem upoważniającym dostęp. 

komentarz 8 kwietnia 2023 przez Gynvael Coldwind Nałogowiec (27,990 p.)
@Wiciorny, filtrowanie po hostach/regionach/etc zadziała tylko jeśli masz znaną i ograniczoną liczbę klientów, tj. niepubliczną appkę. I wtedy po hoście bym nie sprawdzał, tylko po prostu zrobił uwierzytelnienie jakiegoś rodzaju.

Z tego co zrozumiałem appka ma być publiczna, więc tutaj bez uwierzytelnienia się dużo nie zrobi (chyba, że konta można zakładać ot tak, to gorzej :D).
0 głosów
odpowiedź 6 maja 2023 przez michal Mądrala (5,560 p.)
Doprecowywując apka ma być publicznie dostępna, coś typu olx, czy otomoto, gzie będzie można przeglądać i wyszukiwać pozycje z bazy. Jednak z czasem gdyby baza się powiększyła chciałbym uniknąć sytuacji żeby ktoś nie powołany poza aplikacjami mojego klienta mógł pobierać dane z api.
Tak jak wcześniej wspominałem do api miała by mieć aplikacja reactowa i mobilna na androida.

Mam jeszcze dodatkowo pytanie czy jeśli nie było by apki mobilnej tylko sama reactowa na tym samym serwerze co api laravel to można było by to jakoś łatwo zabezpieczyć?
0 głosów
odpowiedź 7 maja 2023 przez Nudzi mi się Gaduła (4,460 p.)
Można przetestować cloudflare. Dobrze radzi sobie z blokowaniem botów przynajmniej dla zwykłych stron, nie wiem jak radzi sobie z api.

Inne rozwiązanie to captcha. Jeżeli wykryje za dużo rządań lub w krótkim czasie blokować dostęp do puki nie wypełni captchy.

Podobne pytania

0 głosów
3 odpowiedzi 425 wizyt
0 głosów
3 odpowiedzi 398 wizyt
pytanie zadane 9 lutego 2020 w Algorytmy przez michal Mądrala (5,560 p.)
0 głosów
1 odpowiedź 346 wizyt
pytanie zadane 15 grudnia 2018 w JavaScript przez tomo9300 Nowicjusz (140 p.)

92,679 zapytań

141,582 odpowiedzi

320,065 komentarzy

62,041 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...