Při použití `Whenloaded ()` v GraphQl, což je obvykle metoda pro podmíněně načtení souvisejících dat nebo asociací (např. V rezolverech GraphQL založené na ORM) může nastat několik běžných bezpečnostních úskalí. Tato úskalí se většinou týkají širších problémů se zabezpečením GraphQL, ale jsou zvláště důležité, protože `, když jsou nakládáni ()`, často zahrnuje načítání dalších vnořených nebo souvisejících údajů, zvyšování složitosti a rizika.
Společné bezpečnostní úskalí s `whloaded ()` v Graphql
** 1. Nekonzistentní nebo chybějící kontroly autorizace
`whloaded ()` často spouští načítání vnořených nebo souvisejících dat po spuštění počátečního resolveru. Pokud není logika autorizace konzistentně používána v každém resolveru nebo bodě načítání dat (včetně těch spuštěných `whloaded ()`), neautorizovaní uživatelé mohou získat přístup k citlivým datům. Jedná se o běžný problém, kdy jsou chráněny některé cesty ke stejným datům, ale jiné (jako jsou ty přes `, když jsou nakládány ()`), nejsou, což útočníkům umožňuje obejít ovládací prvky přístupu [4] [6]. Oprávnění musí být vynuceno jak na úrovni dotazu, tak uvnitř všech vnořených resolverů nebo datových nakladačů.
** 2. Nadměrné a složité dotazy vedoucí k odmítnutí služby (DOS)
Použití `Whenloaded ()` může způsobit hluboce vnořené dotazy, které načítají velké množství souvisejících dat. Útočníci to mohou využít vytvořením dotazů, které způsobují nadměrné načítání a zpracování dat, což vede k vyčerpání zdrojů a DOS. Schopnost GraphQL načíst více souvisejících objektů v jednom dotazu je náročné předpovídat využití zdrojů a `, když je naloženo ()`, může to zhoršit načtením dalších dat podmíněně [4] [5]. Zmírnění zahrnují omezení hloubky dotazů, skóre složitosti a omezení rychlosti.
** 3. Expozice citlivých dat nesprávným výběrem pole
Pokud `Whenloaded ()` Načítají data související s načítáním bez pečlivé kontroly nad tím, která pole jsou vystavena, mohou být citlivé informace, jako jsou hesla, žetony nebo podrobnosti o soukromém uživateli, neúmyslně vráceny v reakci GraphQL [5]. Toto riziko je zvýšeno, pokud chybí kontroly autorizace nebo pokud chybové zprávy úniku informací. Vývojáři musí zajistit, aby citlivá pole nebyla nikdy vystavena, i když jsou načtena vnořená data.
** 4. Injekční útoky prostřednictvím nesprávné ověření vstupu
Když se používá `, když se používá ()` s dynamickými argumenty nebo filtry, může nesprávná ověření vstupů vést k zranitelnosti injekce, jako je injekce dotazu GraphQL nebo dokonce injekci SQL, pokud není načtení základních dat správně parametrizováno [6]. Útočníci by mohli injekční škodlivé dotazy nebo příkazy, které manipulují s logikou načítající data. Zásadní je správná ověření vstupu a použití parametrizovaných dotazů.
** 5. Okopnutí omezení míry a ochrany hrubé síly
Protože `Whenloaded ()` může způsobit více vnořených dat v rámci jediného dotazu, útočníci to mohou využít tak, aby obešli tradiční omezení rychlosti. Například mohou poslat jediný komplexní dotaz, který spustí mnoho načtení nebo mutací dat, účinně provádí útoky hrubé síly nebo výčtu bez spuštění omezení na požadování [4] [7]. Strategie omezující sazbu musí zvážit složitost dotazů a vnořené operace.
** 6. Zvýšená povrch útoku v důsledku introspekce a nástrojů schématu
Použití `, když je naloženo ()`, často odráží komplexní schéma s více vnořenými vztahy. Útočníci mohou používat introspekci GraphQL a nástroje, jako je Graphiql, objevit tyto vztahy a řemeslné dotazy, které využívají `, když jsou zatíženy ()` pro přístup nezamýšlených dat [1] [8]. Deaktivace introspekce ve výrobě nebo jeho omezení na autorizované uživatele může toto riziko snížit.
Shrnutí
Hlavní nástrahy zabezpečení při používání `whloaded ()` v GraphQl se točí kolem:
- Neschopnost vynutit konzistentní oprávnění na všech vnořených cestách načítání dat.
- Povolení příliš složitých nebo hlubokých dotazů, které způsobují DOS.
- Vystavení citlivých dat prostřednictvím vnořených polí.
- Nedostatečná ověření vstupu vedoucí k injekčním útokům.
- Okopnutí limitů rychlosti v důsledku komplexních vnořených dotazů.
- Zvýšená expozice v důsledku introspekce a nástrojů schématu.
Zmírnění zahrnují přísné kontroly autorizace v každém resolveru, složitost dotazů a omezení hloubky, přísné ověření vstupů, pečlivé návrh schématu, deaktivaci introspekce ve výrobě a komplexní omezení míry přizpůsobené pro strukturu dotazů GraphQL [3] [5] [6] [8].
Citace:
[1] https://portswigger.net/web-security/graphql
[2] https://www.imperva.com/blog/graphql-vulnerabities-common-tacks/
[3] https://tyk.io/blog/Graphql-security-7-common-vulnerability-and-how-to-Mitigate-the-risk/
[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_sthe_common_graphql_vulnerability_to_make_your_api_production_ready
[7] https://beaglesecurity.com/blog/article/graphql-atacks-vulnerabities.html
[8] https://www.fastly.com/blog/exploring-the-security-mplication-of-graphql