Når man bruger `når loaded ()` i GraphQL, som typisk er en metode til betinget belastningsrelaterede data eller tilknytninger (f.eks. I ORM-baserede GraphQL-resolvers), kan flere almindelige sikkerhedsmuligheder opstå. Disse faldgruber vedrører for det meste bredere GraphQL -sikkerhedsproblemer, men er især relevante, fordi `når load ()` ofte involverer at hente yderligere indlejrede eller relaterede data, hvilket øger kompleksiteten og risikoen.
Almindelige sikkerhedsfulde med `når loaded ()` i GraphQL
** 1. Inkonsekvent eller manglende godkendelseskontrol
`Når den er load ()` udløser ofte belastning af indlejrede eller relaterede data efter den indledende opløsningskørsel. Hvis autorisationslogik ikke konsekvent anvendes ved hver opløsnings- eller databelastningspunkt (inklusive dem, der er udløst af `når loaded ()`), kan uautoriserede brugere få adgang til følsomme data. Dette er et almindeligt problem, hvor nogle stier til de samme data er beskyttet, men andre (som dem via `, når de er load ()`), ikke er, hvilket giver angribere mulighed for at omgå adgangskontrol [4] [6]. Tilladelse skal håndhæves både på forespørgselsniveauet og inden for alle indlejrede opløsere eller datalæssere.
** 2. Over-henting og komplekse forespørgsler, der fører til benægtelse af service (DOS)
Brug af `når load ()` kan forårsage dybt indlejrede forespørgsler, der henter store mængder relaterede data. Angribere kan udnytte dette ved at skabe forespørgsler, der forårsager overdreven dataindlæsning og -behandling, hvilket fører til ressourceudmattelse og DOS. GraphQl's evne til at hente flere relaterede objekter i en enkelt forespørgsel gør det udfordrende at forudsige ressourceforbrug, og `når den er ()` kan forværre dette ved at indlæse yderligere data betinget [4] [5]. Begrænsninger inkluderer forespørgselsdybdebegrænsning, kompleksitetsscoring og hastighedsbegrænsende.
** 3. Eksponering af følsomme data gennem forkert valg af felt
Hvis `når load ()` belastede relaterede data uden omhyggelig kontrol over hvilke felter der udsættes for, kan følsomme oplysninger såsom adgangskoder, tokens eller private brugeroplysninger ikke blive returneret i GraphQL -responsen [5]. Denne risiko øges, hvis der mangler tilladelse, eller hvis fejlmeddelelser lækker følsomme oplysninger. Udviklere skal sikre, at følsomme felter aldrig udsættes for, selv når indlejrede data indlæses.
** 4. Injektionsangreb via forkert indgangsvalidering
Når `når load ()` bruges med dynamiske argumenter eller filtre, kan forkert indgangsvalidering føre til injektionssårbarheder, såsom grafql -forespørgselinjektion eller endda SQL -injektion, hvis de underliggende datahentning ikke er korrekt parameteriseret [6]. Angribere kan injicere ondsindede forespørgsler eller kommandoer, der manipulerer datahentningen af logikken. Korrekt inputvalidering og anvendelse af parametriserede forespørgsler er vigtige.
** 5. Omgås hastighedsbegrænsende og brute kraftbeskyttelse
Fordi `Når loaded ()` kan forårsage flere indlejrede data, henter inden for en enkelt forespørgsel, kan angribere udnytte dette til at omgå traditionel rentebegrænsning. For eksempel kan de sende en enkelt kompleks forespørgsel, der udløser mange data henter eller mutationer, hvilket effektivt udfører brute force eller optællingsangreb uden at udløse grænser pr. Request [4] [7]. Strategi -begrænsende strategier skal overveje forespørgselskompleksitet og indlejrede operationer.
** 6. Øget angrebsoverflade på grund af skema introspektion og værktøj
Brugen af `når loaded ()` afspejler ofte et komplekst skema med flere indlejrede forhold. Angribere kan bruge GraphQL -introspektion og værktøjer som GraphiQL til at opdage disse forhold og håndværksspørgsmål, der udnytter `, når de blev load ()` for at få adgang til utilsigtede data [1] [8]. Deaktivering af introspektion i produktionen eller begrænsning af den til autoriserede brugere kan reducere denne risiko.
Resume
De vigtigste sikkerhedsfulde, når de bruger `når loaded ()` i GraphQL drejer sig om:
- Manglende håndhævelse af ensartet tilladelse på alle indlejrede dataindlæsningsstier.
- Tillader alt for komplekse eller dybe forespørgsler, der forårsager DOS.
- Udsætter følsomme data gennem indlejrede felter.
- Utilstrækkelig indgangsvalidering, der fører til injektionsangreb.
- Omgås hastighedsgrænser på grund af komplekse indlejrede forespørgsler.
- Øget eksponering på grund af skema introspektion og værktøj.
Begrænsninger inkluderer streng godkendelseskontrol ved enhver opløsning, forespørgselskompleksitet og dybdebegrænsende, streng inputvalidering, omhyggelig skema -design, deaktivering af introspektion i produktionen og omfattende hastighedsbegrænsende skræddersyet til GraphQL's forespørgselsstruktur [3] [4] [5] [6] [8].
Citater:
[1] https://portswigger.net/web-security/graphql
[2] https://www.imperva.com/blog/graphql-vulnerability-common-attacks/
)
[4] https://www.brightsec.com/blog/graphql-security/
[5] https://blog.convisoappsec.com/en/security-in-graphql/
)
[7] https://beaglesecurity.com/blog/article/graphql-attacks-vulnerabilities.html
[8] https://www.fastly.com/blog/exploring-ssecurity-implications-of-graphql