IT-Sicherheit Glossar

Was ist GraphQL und wie wird es abgesichert?

GraphQL ist eine Abfragesprache und Laufzeit für APIs. Clients beschreiben die benötigten Felder, während das Schema Typen, Beziehungen, Queries und Mutations vorgibt. Ein einzelner Endpunkt ersetzt häufig viele REST-Routen. Das reduziert Over- und Underfetching, verlagert aber Sicherheit in Resolver, Feldrechte und die Begrenzung frei kombinierbarer Abfragen.

Beispiel einer Abfrage

query Order($id: ID!) {
  order(id: $id) {
    id
    status
    customer { email }
  }
}

Das Schema verhindert nicht automatisch, dass ein Benutzer fremde Bestellungen oder das E-Mail-Feld liest. Autorisierung muss für Objekt und gegebenenfalls Feld im Resolver oder einer zentralen Policy erfolgen.

Unsicherer und sicherer Resolver

// Unsicher: jedes angemeldete Konto kann jede ID abfragen
order: (_, { id }, ctx) => db.orders.findById(id)

// Besser: Mandant und Berechtigung sind Teil der Abfrage
order: async (_, { id }, ctx) => {
  requireAuthenticated(ctx.user);
  return db.orders.findOne({
    id,
    tenantId: ctx.user.tenantId,
    readableBy: ctx.user.id
  });
}

Typische GraphQL-Schwachstellen

  • BOLA/IDOR:
    Resolver laden Objekte nur anhand einer vom Client gelieferten ID.
  • Feldautorisierung:
    Vertrauliche Felder sind über verschachtelte Pfade erreichbar.
  • Denial of Service:
    Tiefe, zyklische, aliased oder gebatchte Abfragen vervielfachen Arbeit.
  • Mass Assignment:
    Input-Objekte werden ungefiltert auf Datenmodelle übertragen.
  • Informationsleck:
    Introspection, Fehlermeldungen und Vorschläge offenbaren internes Schema und Technologien.
  • Injection:
    Resolver übergeben Argumente unsicher an Datenbanken, Templates oder Betriebssysteme.

Wie wird GraphQL abgesichert?

  • - Objekt- und Feldberechtigungen zentral und standardmäßig ablehnend implementieren.
  • - Inputs mit Schema plus fachlichen Regeln validieren; Datenbankmodelle nicht direkt binden.
  • - Query-Kosten anhand Tiefe, Feldern, Listenlimits und Resolveraufwand begrenzen.
  • - Pagination, maximale Page Size, Timeouts und Rate Limits pro Identität verwenden.
  • - Persisted Queries oder Allowlisting für besonders kontrollierte Clients erwägen.
  • - Introspection in Produktion risikobasiert entscheiden; das Abschalten behebt keine Autorisierungsfehler.

Nützliche Open-Source-Werkzeuge

GraphQL Cop prüft häufige Fehlkonfigurationen. GraphQLmap unterstützt autorisierte manuelle Tests, und Clairvoyance kann über Fehlervorschläge Teile eines Schemas rekonstruieren. Die Werkzeuge finden keine vollständige Geschäftslogik: Testkonten mit verschiedenen Rollen und negative Resolver-Tests bleiben notwendig.

Penetrationstests

Sicherheitslücken aufdecken

Professionelle Penetrationstests für Ihr Unternehmen

Web Apps
Netzwerke
Mobile Apps
10% Neukunden-Rabatt
Jetzt planen

Mehr Informationsmaterial

Vielen Dank für dein Feedback! Wir werden es prüfen und unseren Artikel anpassen.

Hast du Feedback zum Thema GraphQL? Schreib uns!