Veilig coderen en de OWASP Top 10 voor backends · Les

GraphQL API-beveiliging

Pak specifieke beveiligingsuitdagingen in GraphQL API's aan, zoals het beperken van querydiepte, complexiteitsanalyse en correcte autorisatie.

Les 2 van 411 stappen

GraphQL API-beveiliging is een gratis Veilig coderen en de OWASP Top 10 voor backends-les op CoddyKit. Dit is les 2 van 4. Je kunt 3 lessen uit dit leerpad gratis volledig lezen — daarna ontgrendelt CoddyKit PRO alle lessen, plus praktische oefeningen met een ingebouwde code-editor en een AI-tutor die 24/7 beschikbaar is. Deze les maakt deel uit van het leertraject Veilig coderen en de OWASP Top 10 voor backends. Je voortgang wordt gesynchroniseerd op het web en in de CoddyKit-app. De cursus Veilig coderen en de OWASP Top 10 voor backends bevat in totaal 4 lessen.

Het beveiligingslandschap van GraphQL

GraphQL-API's bieden ongelooflijke flexibiliteit, doordat clients precies de gegevens kunnen opvragen die ze nodig hebben. Deze kracht brengt echter unieke beveiligingsuitdagingen met zich mee die verschillen van traditionele REST-API's.

In deze les bekijken we hoe je je GraphQL-backend beschermt tegen veelvoorkomende kwetsbaarheden, zodat zowel de prestaties als de gegevensintegriteit gewaarborgd blijven.

Flexibele query's, nieuwe risico's

In tegenstelling tot REST, waarbij eindpunten vaste gegevensstructuren definiëren, kunnen clients met GraphQL aangepaste query's samenstellen. Hoewel dit efficiënt is, kan deze flexibiliteit worden misbruikt:

  • Overmatige diepte: een kwaadwillende query kan diep geneste gegevens opvragen, wat mogelijk tot overbelasting van de server leidt.
  • Complexe bewerkingen: sommige query's kunnen dure databasekoppelingen of berekeningen omvatten die de prestaties verminderen.

We hebben specifieke strategieën nodig om deze flexibiliteit veilig te beheren.

Querydiepte beheersen

Beperking van de querydiepte is een essentiële techniek om te diep geneste query's te voorkomen. Hiermee wordt het maximaal toegestane nestniveau voor elke binnenkomende GraphQL-query ingesteld.

Waarom is dit belangrijk? Diepe query's kunnen leiden tot:

  • Denial-of-Service-aanvallen (DoS) doordat serverresources worden uitgeput.
  • Aanzienlijke prestatievermindering voor legitieme gebruikers.
  • Onnodige en kostbare databasebelasting.

De meeste GraphQL-serverbibliotheken bieden eenvoudige manieren om deze limiet te configureren.

Querydiepte visualiseren

Stel je een query voor die gebruikers ophaalt, vervolgens hun berichten, daarna reacties op die berichten en vervolgens de auteurs van die reacties, enzovoort. Zo ontstaat een diep geneste structuur:

query DeepQuery {
  users {            # Depth 1
    posts {          # Depth 2
      comments {     # Depth 3
        author {     # Depth 4
          posts {    # Depth 5
            # ... and so on
          }
        }
      }
    }
  }
}

Met een dieptelimiet (bijvoorbeeld 5) wordt elke query geblokkeerd die verder dan dit niveau probeert te nesten.

Verder dan alleen diepte: complexiteit

Hoewel beperking van de diepte effectief is, brengt deze niet altijd de werkelijke kosten van een query in kaart. Een 'ondiepe' query kan nog steeds erg duur zijn als deze een groot aantal items opvraagt of op elk niveau zware berekeningen uitvoert.

Complexiteitsanalyse lost dit op door aan elk veld in uw schema een 'kostprijs' toe te kennen. Deze kostprijs kan worden gebaseerd op factoren zoals databasebewerkingen, API-aanroepen of intensieve berekeningen.

Hoe complexiteit wordt gemeten

Aan elk veld in uw GraphQL-schema kan een specifieke complexiteitsscore worden toegekend. Bijvoorbeeld:

  • user.id: lage kosten, bijvoorbeeld 1.
  • user.posts: kan basiskosten hebben plus een vermenigvuldigingsfactor op basis van het aantal opgehaalde berichten.
  • searchUsers(query: "..."): kan hogere vaste kosten hebben (bijvoorbeeld 10) doordat een externe zoekmachine wordt aangesproken.

De totale complexiteit van een query wordt berekend door deze scores op te tellen. Als de waarde een vooraf bepaalde drempel overschrijdt, wordt de query geweigerd, zodat uw server wordt beschermd.

Autorisatie in GraphQL

Net als elke backend-API hebben GraphQL-API's robuuste autorisatie nodig. Zo krijgen zelfs geauthenticeerde gebruikers alleen toegang tot gegevens en kunnen ze alleen acties uitvoeren waarvoor ze expliciet toestemming hebben.

In GraphQL wordt autorisatie meestal geïmplementeerd op resolverniveau. Een resolver is een functie die verantwoordelijk is voor het ophalen van de gegevens voor een specifiek veld in uw schema. Dit maakt fijnmazige controle mogelijk.

Fijnmazige toegangscontrole

De structuur van GraphQL maakt zeer fijnmazige autorisatie mogelijk, vaak tot op afzonderlijke velden. Dit staat bekend als autorisatie op veldniveau.

Een beheerder kan bijvoorbeeld alle details (zoals e-mailadres en salaris) van een User-object zien, terwijl een gewone gebruiker voor hetzelfde User-object alleen openbare profielinformatie (zoals gebruikersnaam en biografie) kan bekijken. De resolver bepaalt welke gegevens worden geretourneerd op basis van de rollen of machtigingen van de aanvragende gebruiker.

Schets van resolverautorisatie

Hier ziet u conceptueel hoe een resolver voor een specifiek veld autorisatie kan afdwingen:

# Conceptual GraphQL Resolver for 'User.email' field

resolveUserEmail(user, args, context) {
  // 'context' holds info about the authenticated user
  if (context.currentUser.id === user.id || context.currentUser.isAdmin) {
    return user.email;
  } else {
    throw new Error("Unauthorized: You cannot view this email.");
  }
}

Dit fragment laat zien hoe het object context, dat authenticatie- en rolinformatie van de gebruiker bevat, wordt gebruikt om toegangsbeslissingen te nemen.

GraphQL-beveiligingscontrole

Welke van de volgende strategieën zijn geldige manieren om GraphQL-query's te voorkomen die buitensporig veel resources vereisen?

Samenvatting van GraphQL-beveiliging

Vandaag hebben we de belangrijkste beveiligingsaspecten van GraphQL-API's verkend. Je hebt geleerd:

  • Welke unieke beveiligingsuitdagingen de flexibiliteit van GraphQL met zich meebrengt.
  • Hoe beperking van de querydiepte DoS-aanvallen door diep geneste query's helpt voorkomen.
  • Hoe belangrijk complexiteitsanalyse is om de resourcekosten van query's te beheren.
  • Hoe je autorisatie op resolverniveau implementeert, inclusief toegangscontrole op veldniveau.

GraphQL beveiligen vereist zorgvuldig ontwerp en zorgvuldige implementatie om de krachtige flexibiliteit te combineren met robuuste bescherming.

Gratis beginnen

Leer Veilig coderen en de OWASP Top 10 voor backends met een AI-tutor — gratis

Schrijf echte code en voer die uit in je browser, krijg direct hulp van een AI-tutor die 24/7 beschikbaar is en ga verder waar je gebleven bent op het web of in de app.

Cursussen
12
Lessen
48

Veelgestelde vragen

Is de les “GraphQL API-beveiliging” gratis?

Ja — je kunt hier op het web alle 3 lessen van het leerpad Veilig coderen en de OWASP Top 10 voor backends, waaronder “GraphQL API-beveiliging”, gratis volledig lezen. Daarna ontgrendelt CoddyKit PRO alle lessen, plus interactieve oefeningen met een ingebouwde code-editor en een AI-tutor die 24/7 beschikbaar is. De cursus Veilig coderen en de OWASP Top 10 voor backends bevat in totaal 4 lessen.

Wat leer ik in “GraphQL API-beveiliging”?

Pak specifieke beveiligingsuitdagingen in GraphQL API's aan, zoals het beperken van querydiepte, complexiteitsanalyse en correcte autorisatie. Je oefent met Veilig coderen en de OWASP Top 10 voor backends door code rechtstreeks in de browser uit te voeren. Een AI-begeleider die 24/7 beschikbaar is beantwoordt je vragen terwijl je de les doorwerkt.

Heb ik ervaring nodig om met Veilig coderen en de OWASP Top 10 voor backends te beginnen?

Ervaring vooraf is niet nodig. Veilig coderen en de OWASP Top 10 voor backends op CoddyKit is opgebouwd voor beginners tot gevorderden, zodat je hier of bij het begin kunt starten en in je eigen tempo kunt leren. Dit is les 2 van 4.

Hoe lang duurt de les “GraphQL API-beveiliging”?

De meeste lessen van CoddyKit duren ongeveer 5–10 minuten. Elke les is kort en interactief, zodat je gestaag vooruitgaat en op het web en in de app precies verdergaat waar je was gebleven.

Kan ik code schrijven en uitvoeren in deze les over Veilig coderen en de OWASP Top 10 voor backends?

Ja. Elke les over Veilig coderen en de OWASP Top 10 voor backends bevat een ingebouwde code-editor, zodat je rechtstreeks in je browser echte code kunt schrijven en uitvoeren en direct feedback van AI krijgt — lokale installatie is niet nodig.

Alle lessen in deze cursus

  1. Veilige RESTful API's ontwerpen
  2. GraphQL API-beveiliging
  3. SSRF-aanvallen voorkomen
  4. API-rate limiting en throttling
← Terug naar Veilig coderen en de OWASP Top 10 voor backends