Pri uporabi `whleoded ()` v Graphql, ki je običajno metoda za pogojno nalaganje podatkov ali asociacij, povezanih s povezanimi (npr. V Graphql Resolvers na osnovi ORM), se lahko pojavi več skupnih varnostnih pasti. Te pasti se večinoma nanašajo na širša vprašanja varnosti GraphQL, vendar so še posebej pomembne, ker `, ko so nalagani ()`, pogosto vključujejo dodatne ugnezdene ali povezane podatke, povečanje zapletenosti in tveganja.
Be
** 1. Neskladni ali manjkajoči pregledi dovoljenja
`kadar je nalagan ()` pogosto sproži nalaganje gnezdenih ali sorodnih podatkov po začetnem ločilniku. Če se logika pooblastila ne uporablja dosledno na vsakem razredu ali nalaganju podatkov (vključno s tistimi, ki jih sproži `, ko je nalagan ()`), lahko nepooblaščeni uporabniki dobijo dostop do občutljivih podatkov. To je običajno vprašanje, pri katerem so nekatere poti do istih podatkov zaščitene, druge (kot tiste prek `, ko je nalagane ()`) niso, kar omogoča napadalcem, da zaobidejo nadzor dostopa [4] [6]. Pooblastilo je treba uveljaviti tako na ravni poizvedb kot znotraj vseh ugnezdenih ločljivosti ali podatkovnih nakladalcev.
** 2. Prekomerne in zapletene poizvedbe, ki vodijo do zanikanja storitve (DOS)
Uporaba `When Deaded ()` lahko povzroči globoko ugnezdene poizvedbe, ki pridobijo velike količine povezanih podatkov. Napadalci lahko to izkoristijo z izdelavo poizvedb, ki povzročajo prekomerno nalaganje in obdelavo podatkov, kar vodi do izčrpanosti virov in DOS. Graphql -jeva sposobnost pridobivanja več povezanih predmetov v eni poizvedbi je zahtevna za napovedovanje porabe virov in `, ko je nalagan ()`, lahko to poslabša tako, da dodatne podatke pogojno naloži dodatne podatke [4] [5]. Ublažitve vključujejo omejevanje globine poizvedb, točkovanje kompleksnosti in omejevanje hitrosti.
** 3. Izpostavljenost občutljivih podatkov z nepravilno izbiro polja
Če `Ko naložite ()`, povezane s podatki, brez natančnega nadzora nad tem, katera polja so izpostavljena, se lahko v odzivu GraphQL nehote vrnejo občutljivi podatki, kot so gesla, žetoni ali zasebni podatki o uporabniku [5]. To tveganje se poveča, če manjkajo preverjanja pooblastil ali če sporočila o napaki puščajo občutljive informacije. Razvijalci morajo zagotoviti, da občutljiva polja niso nikoli izpostavljena, tudi ko se nalagajo gnezdeni podatki.
** 4. Napadi injiciranja z nepravilno potrjevanjem vhoda
Kadar se `Ko se naloži ()` z dinamičnimi argumenti ali filtri, lahko nepravilna validacija vhoda privede do ranljivosti vbrizgavanja, kot je vbrizgavanje poizvedbe GraphQL ali celo vbrizgavanje SQL, če osnovni podatki niso pravilno parametrizirani [6]. Napadalci lahko vbrizgajo zlonamerne poizvedbe ali ukaze, ki manipulirajo z logiko pridobivanja podatkov. Pravilna vhodna validacija in uporaba parametriziranih poizvedb sta bistvena.
** 5. Omejevanje hitrosti in zaščito pred močjo
Ker lahko `Ko naloži ()` povzroči več ugnezdenih podatkov v eni poizvedbi, lahko napadalci to izkoristijo tako, da zaobidejo tradicionalno omejevanje hitrosti. Na primer, lahko pošljejo eno kompleksno poizvedbo, ki sproži številne pridobitve podatkov ali mutacij, kar učinkovito izvaja napade surove sile ali naštevanja, ne da bi sprožili omejitve na zahtevo [4] [7]. Strategije za omejevanje hitrosti morajo upoštevati kompleksnost poizvedb in ugnezdene operacije.
** 6. Povečana napadalna površina zaradi introspekcije sheme in orodja
Uporaba `, ko je nalagana ()` pogosto odraža kompleksno shemo z več ugnezdenimi odnosi. Napadalci lahko uporabijo introspekcijo GraphQL in orodja, kot je Graphiql, za odkrivanje teh odnosov in obrtnih poizvedb, ki izkoriščajo `, ko je nalagan ()` za dostop do nenamernih podatkov [1] [8]. Onemogočanje introspekcije v proizvodnji ali omejitev pooblaščenih uporabnikov lahko to tveganje zmanjša.
Povzetek
Glavne varnostne pasti, ko uporabljate `whleoded ()` v grafql se vrtijo naokoli:
- Če ne uveljavljamo doslednega dovoljenja na vseh ugnezdenih poteh nalaganja podatkov.
- Dovoljenje preveč zapletenih ali globokih poizvedb, ki povzročajo DOS.
- izpostavljanje občutljivih podatkov prek ugnezdenih polj.
- nezadostna validacija vhoda, ki vodi do napadov v injiciranje.
- Omejitve hitrosti zaradi zapletenih ugnezdenih poizvedb.
- Povečana izpostavljenost zaradi introspekcije sheme in orodja.
Ublažitve vključujejo stroge preglede pooblastil pri vsakem odločitvi, kompleksnost poizvedb in globino, strogo validacijo vhoda, skrbno zasnovo shem, onemogočanje introspekcije v proizvodnji in celovito omejitev hitrosti, prilagojene za strukturo poizvedb GraphQL [3] [4] [5] [6] [8].
Navedbe:
[1] https://portswigger.net/web-security/graphql
[2] https://www.imperva.com/blog/graphql-Vulnebilnosti-common-attacks/
[3] https://tyk.io/blog/graphql-security-7-common-Vulnernebility-and-how-to-mitatigat-the-risks/
[4] https://www.brightsec.com/blog/graphql-security/
[5] https://blog.convisoappsec.com/sl/security-in-graphql/
[6] https://wundergraph.com/blog/the_complete_graphql_security_guide_fixing_the_13_most_common_graphql_Vulnernebility_To_make_your_Pi_production_ready
[7] https://beaglesecurity.com/blog/article/graphql-attacks-Vulnernibility.html
[8] https://www.fastly.com/blog/exploring-the-security-implications-of-grapql