Home Arrow Icon Knowledge base Arrow Icon Global Arrow Icon Jakie są wspólne pułapki bezpieczeństwa podczas używania () w GraphQL


Jakie są wspólne pułapki bezpieczeństwa podczas używania () w GraphQL


Podczas korzystania z `gdy ładowany ()` w GraphQL, który jest zwykle metodą warunkowego ładowania danych lub skojarzeń (np. W rozdzielczości GraphQL opartych na ORM), może powstać kilka typowych pułapek bezpieczeństwa. Pułapki te odnoszą się głównie do szerszych problemów bezpieczeństwa GraphQL, ale są szczególnie istotne, ponieważ „podczas ładowania () często obejmuje pobieranie dodatkowych zagnieżdżonych lub powiązanych danych, zwiększaniu złożoności i ryzyka.

Wspólne pułapki bezpieczeństwa z `` Wheloaded () `in GraphQL

** 1. Niespójne lub brakujące kontrole autoryzacji
`` W przypadku ładowania () często wyzwala ładowanie zagnieżdżonych lub powiązanych danych po początkowym uruchomieniu rozdzielczości. Jeżeli logika autoryzacji nie jest konsekwentnie stosowana w każdym punkcie załadunku lub danych (w tym tych wyzwalanych przez `` azload () `), nieautoryzowani użytkownicy mogą uzyskać dostęp do poufnych danych. Jest to powszechny problem, w którym niektóre ścieżki do tych samych danych są chronione, ale inne (jak te za pośrednictwem „podczas ładowania ()`), nie pozwalają atakującym na ominięcie kontroli dostępu [4] [6]. Upoważnienie musi być egzekwowane zarówno na poziomie zapytania, jak i we wszystkich zagnieżdżonych rozdzielczościach lub ładowarkach danych.

** 2. Nadmierne i złożone zapytania prowadzące do odmowy usług (DOS)
Użycie „podczas ładowania () może powodować głęboko zagnieżdżone zapytania, które pobierają duże ilości powiązanych danych. Atakujący mogą to wykorzystać, tworząc zapytania, które powodują nadmierne ładowanie i przetwarzanie danych, prowadząc do wyczerpania zasobów i DOS. Zdolność Graphql do pobierania wielu powiązanych obiektów w jednym zapytaniu sprawia, że ​​przewidywanie wykorzystania zasobów jest trudne, a „W przypadku ładowania () może to zaostrzyć poprzez warunkowo ładowanie dodatkowych danych [4] [5]. Łączności obejmują ograniczenie głębokości zapytań, ocenę złożoności i ograniczenie szybkości.

** 3. Ekspozycja poufnych danych poprzez niewłaściwy wybór pola
Jeśli `` gdy ładował () `załaduje powiązane dane bez starannej kontroli, na które pola są narażone, poufne informacje, takie jak hasła, tokeny lub prywatne dane użytkownika, mogą zostać przypadkowo zwrócone w odpowiedzi GraphQL [5]. Ryzyko to jest zwiększone, jeśli brakuje kontroli autoryzacji lub jeśli komunikaty o błędach wycieka wrażliwe na informacje. Deweloperzy muszą upewnić się, że wrażliwe pola nigdy nie są narażone, nawet gdy dane zagnieżdżone są ładowane.

** 4. Ataki wtrysku poprzez niewłaściwe walidacja wejściowa
Gdy `` gdy ładowany () `jest używany z dynamicznymi argumentami lub filtrami, niewłaściwe walidacja wejściowa może prowadzić do luk w podatności, takich jak wstrzyknięcie zapytań GraphQL lub nawet wstrzyknięcie SQL, jeśli pobieranie danych nie jest prawidłowo sparametryzowane [6]. Atakerzy mogą wstrzyknąć złośliwe zapytania lub polecenia manipulujące logiką pobierania danych. Niezbędne są prawidłowe sprawdzanie poprawności wejściowej i użycie sparametryzowanych zapytań.

** 5. Omijanie ograniczania szybkości i ochrona siły brutalnej
Ponieważ `` gdy ładowany () 'może powodować wiele zagnieżdżonych pobierania danych w ramach jednego zapytania, atakujący mogą wykorzystać to, aby ominąć tradycyjne ograniczenie stawek. Na przykład mogą wysyłać jedno złożone zapytanie, które uruchamia wiele pobierania danych lub mutacji, skutecznie wykonywanie ataków brutalnej lub wyliczenia bez uruchamiania limitów powtórnych [4] [7]. Strategie ograniczające stawkę muszą uwzględniać złożoność zapytania i operacje zagnieżdżone.

** 6. Zwiększona powierzchnia ataku z powodu introspekcji i oprzyrządowania schematu
Zastosowanie `` podczas ładowania () często odzwierciedla złożony schemat z wieloma zagnieżdżonymi relacjami. Atakerzy mogą używać introspekcji GraphQL i narzędzi, takich jak GraphiQL, aby odkryć te relacje i tworzyć zapytania, które wykorzystują `` Whenloaded () „Aby uzyskać dostęp do niezamierzonych danych [1] [8]. Wyłączanie introspekcji w produkcji lub ograniczenie jej do upoważnionych użytkowników może zmniejszyć to ryzyko.

Streszczenie

Główne pułapki bezpieczeństwa przy użyciu `Wheloaded ()` w GraphQL obracają się wokół:

- Brak egzekwowania spójnej autoryzacji na wszystkich zagnieżdżonych ścieżkach ładowania danych.
- Pozwalając na zbyt złożone lub głębokie zapytania, które powodują DOS.
- Odsłanianie poufnych danych za pomocą zagnieżdżonych pola.
- Niewystarczająca walidacja wejściowa prowadząca do ataków wtrysku.
- Limity szybkości omijania spowodowane złożonymi zagnieżdżonymi zapytaniami.
- Zwiększona ekspozycja z powodu introspekcji i oprzyrządowania schematu.

Łączności obejmują rygorystyczne kontrole autoryzacji przy każdym rozstrzyganiu, złożoność zapytania i ograniczenie głębokości, ścisłą walidację wejściową, staranne projektowanie schematu, wyłączanie introspekcji w produkcji oraz kompleksowe ograniczające szybkość dostosowane do struktury zapytania Graphql [3] [4] [5] [6] [8].

Cytaty:
[1] https://portswigger.net/web-security/graphql
[2] https://www.imperva.com/blog/graphql-vulnerabilities-common-attacks/
[3] https://tyk.io/blog/graphql-security-7-common-vulnerales-and-how-to-mytigate-the-risks/
[4] https://www.brightsec.com/blog/graphql-security/
[5] https://blog.convisoappsec.com/en/security-in-graphql/
[6] https://wundergraph.com/blog/the_complete_graphql_security_Guide_fixing_the_13_Mant_Common_Graphql_Vulnerales_to_make_your_api_production_ready
[7] https://beaglesecurity.com/blog/article/graphql-attacks-vulnerabilities.html
[8] https://www.fastly.com/blog/exploring-the-security-implatations-of-graphql