Når du bruker `når lastet ()` i GraphQL, som vanligvis er en metode for å betinget å laste relaterte data eller assosiasjoner (f.eks. I ORM-baserte GraphQL-oppløsere), kan det oppstå flere vanlige sikkerhetsgruver. Disse fallgruvene forholder seg stort sett til bredere GraphQL -sikkerhetsproblemer, men er spesielt relevante fordi `når lastet ()` ofte innebærer å hente ytterligere nestede eller relaterte data, noe som øker kompleksiteten og risikoen.
vanlige sikkerhetsfallsgruver med `WhenLoaded ()` i GraphQL
** 1. Inkonsekvent eller manglende autorisasjonskontroller
`Når lastet ()` ofte utløser lasting av nestede eller relaterte data etter den første oppløseren. Hvis autorisasjonslogikk ikke blir brukt konsekvent ved hvert oppløsnings- eller datalastingspunkt (inkludert de som er utløst av `WhenLoaded ()`), kan uautoriserte brukere få tilgang til sensitive data. Dette er et vanlig spørsmål der noen veier til de samme dataene er beskyttet, men andre (som de via `WhenLoaded ()`) er ikke, slik at angripere kan omgå tilgangskontroller [4] [6]. Autorisasjon må håndheves både på spørringsnivå og innenfor alle nestede oppløsere eller datalastere.
** 2. Overfagende og komplekse spørsmål som fører til nektelse av tjeneste (DOS)
Å bruke `når lastet ()` kan forårsake dypt nestede spørsmål som henter store mengder relaterte data. Angripere kan utnytte dette ved å lage spørsmål som forårsaker overdreven databelastning og prosessering, noe som fører til ressursutmattelse og DOS. GraphQLs evne til å hente flere relaterte objekter i en enkelt spørring gjør det utfordrende å forutsi ressursbruk, og `når lastet ()` kan forverre dette ved å laste inn ytterligere data betinget [4] [5]. Begrensninger inkluderer begrensning av spørringsdybde, kompleksitetsscoring og hastighetsbegrensning.
** 3. Eksponering av sensitive data gjennom feil feltvalg
Hvis `når lastet ()` laster relaterte data uten nøye kontroll over hvilke felt som blir utsatt, kan sensitiv informasjon som passord, symboler eller private brukerdetaljer utilsiktet returneres i GraphQL -responsen [5]. Denne risikoen økes hvis autorisasjonskontroller mangler eller hvis feilmeldinger lekker sensitiv informasjon. Utviklere må sørge for at sensitive felt aldri blir utsatt, selv når nestede data er lastet.
** 4. Injeksjonsangrep via feil inngangsvalidering
Når `når lastet ()` brukes med dynamiske argumenter eller filtre, kan feil inngangsvalidering føre til injeksjonssårbarheter, for eksempel GraphQL -spørringsinjeksjon eller til og med SQL -injeksjon hvis de underliggende dataene som henter ikke er riktig parameterisert [6]. Angripere kan injisere ondsinnede spørsmål eller kommandoer som manipulerer dataene som henter logikken. Riktig inngangsvalidering og bruk av parameteriserte spørsmål er essensielle.
** 5. Omgangsfrekvensbegrensning og beskyttelse av brute kraft
Fordi `når lastet ()` kan føre til at flere nestede data henter i en enkelt spørring, kan angripere utnytte dette for å omgå tradisjonell hastighetsbegrensning. For eksempel kan de sende en enkelt kompleks spørring som utløser mange datainnhenter eller mutasjoner, og effektivt utfører brute force eller oppregningsangrep uten å utløse grenser per-Request [4] [7]. Ratebegrensende strategier må vurdere spørringskompleksitet og nestede operasjoner.
** 6. Økt angrepsflate på grunn av skjema introspeksjon og verktøy
Bruken av `når lastet ()` `gjenspeiler ofte et komplekst skjema med flere nestede forhold. Angripere kan bruke GraphQL -introspeksjon og verktøy som GraphiQL for å oppdage disse forholdene og håndverksspørsmålene som utnytter `når lastet ()` for å få tilgang til utilsiktede data [1] [8]. Deaktivere introspeksjon i produksjonen eller begrense den til autoriserte brukere kan redusere denne risikoen.
Sammendrag
De viktigste sikkerhetsfallene når du bruker `når lastet ()` i GraphQL dreier seg om:
- Unnlatelse av å håndheve konsekvent autorisasjon på alle nestede databelastningsveier.
- Tillater altfor komplekse eller dype spørsmål som forårsaker DOS.
- Å utsette sensitive data gjennom nestede felt.
- Utilstrekkelig inngangsvalidering som fører til injeksjonsangrep.
- Omgangsfrekvensgrenser på grunn av komplekse nestede spørsmål.
- Økt eksponering på grunn av skjema introspeksjon og verktøy.
Begrensninger inkluderer strenge autorisasjonskontroller ved hver resolver, spørringskompleksitet og dybdegrensing, streng inngangsvalidering, nøye skjemadesign, deaktivering av introspeksjon i produksjonen og omfattende hastighetsbegrensende skreddersydd for GraphQLs spørringsstruktur [3] [4] [5] [6] [8].
Sitasjoner:
[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-mommon-vulnerabilities-and-how-to-peiate-the-ciss/
[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_most_common_graphql_vulnerabilities_to_make_your_api_production_ready
[7] https://beaglesecurity.com/blog/article/graphql-attacks-vulnerabilities.html
[8] https://www.fastly.com/blog/exploring-thecurity-implications-of-graphql