Home Arrow Icon Knowledge base Arrow Icon Global Arrow Icon Melyek a gyakori biztonsági buktatók, ha a GraphQL -ben betöltött () -t használják


Melyek a gyakori biztonsági buktatók, ha a GraphQL -ben betöltött () -t használják


Ha a „WHODEDED ()` -t használja a GraphQL-be, amely általában egy módszer, amellyel feltételesen betölti a kapcsolódó adatok vagy asszociációk (például az ORM-alapú GraphQL Resolvers-ben), számos közös biztonsági buktató merülhet fel. Ezek a buktatók elsősorban a szélesebb körű GraphQL biztonsági kérdésekre vonatkoznak, de különösen relevánsak, mivel a „amikor a betöltött ()` `gyakran magában foglalja a további beágyazott vagy kapcsolódó adatok beszerelését, a növekvő bonyolultságot és a kockázatot.

Általános biztonsági buktatók `WHODED ()` -val a GraphQL -ben

** 1. Következetlen vagy hiányzó engedélyezési ellenőrzések
`Ha () ()` A kezdeti feloldó futtatása után gyakran kiváltja a beágyazott vagy kapcsolódó adatok betöltését. Ha az engedélyezési logikát nem alkalmazzák következetesen minden feloldó vagy adatbetöltési ponton (ideértve a „When Loaded ()” által kiváltott elemeket is, akkor az illetéktelen felhasználók hozzáférhetnek az érzékeny adatokhoz. Ez egy olyan általános kérdés, ahol ugyanazon adatokhoz fűződő egyes útok védettek, de mások (mint például a „Whtaded ()”) nem, lehetővé téve a támadók számára, hogy megkerüljék a hozzáférési ellenőrzéseket [4] [6]. Az engedélyezést mind a lekérdezés szintjén, mind az összes beágyazott feloldóban vagy az adatterhelőn belül kell végrehajtani.

** 2. A szolgáltatás megtagadásához vezető túlzott és összetett lekérdezések (DOS)
A „When Loaded ()” használatával mélyen beágyazott lekérdezéseket okozhat, amelyek nagy mennyiségű kapcsolódó adatot hoznak. A támadók ezt kihasználhatják, ha olyan lekérdezéseket készítenek, amelyek túlzott adatok betöltését és feldolgozását okozják, ami erőforrás -kimerültséghez és DOS -hoz vezet. A Graphql azon képessége, hogy több kapcsolódó objektumot egyetlen lekérdezéssel letölthessen, kihívást jelent az erőforrás -felhasználás előrejelzéséhez, és a „Loaded ()” súlyosbíthatja ezt, ha további adatokat feltételesen tölt be [4] [5]. Az enyhítések között szerepel a lekérdezés mélységének korlátozása, a bonyolultság pontozása és a sebességkorlátozás.

** 3. Az érzékeny adatok kitettsége nem megfelelő mezőválasztékon keresztül
Ha a „Loaded ()”, ha gondos ellenőrzés nélkül tölti be a kapcsolódó adatokat, mely mezők vannak kitéve, akkor az érzékeny információk, például a jelszavak, a tokenek vagy a privát felhasználói részletek véletlenül visszaküldhetnek a GraphQL válaszban [5]. Ez a kockázat fokozódik, ha hiányoznak az engedélyezési ellenőrzések, vagy ha a hibaüzenetek szivárgó információkat szivárognak. A fejlesztőknek gondoskodniuk kell arról, hogy az érzékeny mezők soha ne legyenek kitéve, még akkor is, ha a beágyazott adatok betöltésre kerülnek.

** 4. Injekciós támadások nem megfelelő bemeneti validálással
Ha a „Loaded ()” -et dinamikus argumentumokkal vagy szűrőkkel használják, a nem megfelelő bemeneti validálás injekciós sebezhetőséghez vezethet, például a GraphQL lekérdezés befecskendezéséhez vagy akár az SQL injekcióhoz, ha a mögöttes adatgyűjtés nem megfelelően paraméterezhető [6]. A támadók rosszindulatú lekérdezéseket vagy parancsokat injektálhatnak, amelyek manipulálják az adatgyűjtő logikát. A megfelelő bemeneti validálás és a paraméterezett lekérdezések használata nélkülözhetetlen.

** 5. Megkerüli a sebességkorlátozó és a brutális erő védelmét
Mivel a "When Loaded ()" egyetlen lekérdezésen belül több beágyazott adatlerakást okozhat, a támadók ezt kihasználhatják a hagyományos sebességkorlátozás megkerülésére. Például egyetlen komplex lekérdezést küldhetnek el, amely számos adatlerakást vagy mutációt vált ki, hatékonyan végrehajtva a brutális erőt vagy a felsorolási támadásokat anélkül, hogy a visszatérésenkénti korlátokat kiváltanák [4] [7]. A sebességkorlátozó stratégiáknak figyelembe kell venniük a lekérdezés komplexitását és a beágyazott műveleteket.

** 6. Megnövekedett támadási felület a séma önellenőrzése és szerszámok miatt
A „Whiled ()” használata gyakran egy komplex sémát tükröz, amely többszörös beágyazott kapcsolatokkal rendelkezik. A támadók használhatják a GraphQL önmagát és olyan eszközöket, mint a Graphiql, hogy felfedezzék ezeket a kapcsolatokat és kézműves lekérdezéseket, amelyek kizsákmányolják a () `-t a nem kívánt adatok eléréséhez [1] [8]. Az önellenőrzés letiltása a termelésben vagy annak korlátozása a meghatalmazott felhasználókra csökkentheti ezt a kockázatot.

Összegzés

A fő biztonsági buktatók, amikor a „Whoaded ()` használatát használják a GraphQL -ben, körül forog:

- Az összes beágyazott adat -betöltési útvonal következetes engedélyének végrehajtása.
- A túlzottan összetett vagy mély lekérdezések lehetővé tétele, amelyek DOS -t okoznak.
- Az érzékeny adatok feltárása beágyazott mezőkön keresztül.
- Az injekciós támadásokhoz nem elegendő bemeneti validálás.
- Az összetett beágyazott lekérdezések miatt megkerüli a sebességkorlátozásokat.
- Fokozott expozíció a séma önellenőrzése és szerszámok miatt.

Az enyhítések magukban foglalják a szigorú engedélyezési ellenőrzéseket minden feloldónál, a lekérdezés komplexitását és a mélységkorlátozást, a szigorú bemeneti validálást, a gondos séma -tervezést, a termelés önellenőrzésének letiltását és a GraphQL lekérdezési struktúrájához testreszabott átfogó sebességkorlátozást [3] [4] [5] [6] [8].

Idézetek:
[1] https://portswigger.net/web-security/graphql
[2] https://www.imperca.com/blog/graphql-vulnerabilities-common-atacks/
[3] https://tyk.io/blog/graphql-security-7-common-vulnerabiles-and-how-to-mitigat-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_the_13_common_graphql_vulnerabiles_to_make_your_api_production_readeady_ready_ready_ready
[7] https://beaglesecurity.com/blog/article/graphql-atacks-vulnerable.html
[8] https://www.fastly.com/blog/exploring-the-security-implications-of-graphql