Premiumpartner beim Havelfest
Wie schon in den letzten Jahren unterstützt Timme Hosting auch 2026 die 61. Ausgabe des Havelfestes (19.-21.06.) in Brandenburg an der Havel als Premiumpartner. Drei spannende Tage finden rund um das Salzhofufer statt.
GraphQL hat sich in den letzten Jahren zu einer beliebten Alternative zu klassischen REST-APIs entwickelt. Statt vieler Endpunkte bietet eine GraphQL-API einen einzigen Einstiegspunkt, über den Clients genau die Daten abfragen können, die sie benötigen.
Ein zentrales Merkmal dieser Architektur ist die sogenannte Introspection. Sie verbessert die Entwicklererfahrung erheblich, kann aber in Produktionsumgebungen auch ein Sicherheitsrisiko darstellen.
Dieser Artikel erklärt, was GraphQL und GraphQL Introspection sind, welche Risiken bestehen und wann der Einsatz dennoch sinnvoll ist.
GraphQL ist eine Abfragesprache für APIs sowie eine Laufzeitumgebung zur Ausführung dieser Abfragen. Der entscheidende Unterschied zu REST besteht darin, dass Clients ihre Datenstruktur selbst definieren können.
Statt mehrere Endpunkte aufzurufen, wird eine einzelne Query an einen GraphQL-Endpoint (häufig /graphql) geschickt.
Der Server liefert genau die angeforderten Felder zurück. Möglich wird das durch ein Schema, das die Struktur der API inklusive aller Typen, Felder, Queries und Mutations definiert.
Introspection ist ein eingebautes Feature von GraphQL, das es erlaubt, dieses Schema direkt über die API abzufragen. Mit speziellen Introspection-Queries können Clients Informationen über die API selbst erhalten, beispielsweise:
Damit fungiert Introspection im Grunde als automatische API-Dokumentation, die direkt über den GraphQL-Endpoint abrufbar ist.
Viele Entwicklerwerkzeuge nutzen dieses Feature. Tools wie GraphiQL oder GraphQL Playground lesen das Schema automatisch aus und stellen eine interaktive Oberfläche bereit, in der Queries getestet und dokumentiert werden können.
Während Introspection in der Entwicklung äußerst praktisch ist, kann es in öffentlich erreichbaren Produktionssystemen ein Sicherheitsproblem darstellen.
Ist Introspection aktiviert, kann jeder Client das komplette Schema abrufen. Dadurch werden sichtbar:
Für Angreifer bedeutet das eine vollständige Angriffslandkarte der API.
Mit dem Schema in der Hand können Angreifer gezielt nach potenziellen Schwachstellen suchen. Dazu gehören etwa:
Die Struktur der API liefert dabei wertvolle Hinweise auf mögliche Angriffsvektoren.
GraphQL erlaubt stark verschachtelte Abfragen. Ohne geeignete Schutzmechanismen können solche Queries sehr ressourcenintensiv sein. Angreifer können dies beispielsweise für Denial-of-Service-Angriffe ausnutzen.
Introspection selbst ist nicht die Ursache, erleichtert aber das systematische Finden geeigneter Query-Strukturen.
Trotz der Risiken ist Introspection keineswegs grundsätzlich problematisch. In vielen Szenarien ist es sogar ausdrücklich erwünscht.
Während der Entwicklung verbessert Introspection die Developer Experience erheblich. Entwickler können:
Daher sollte Introspection in Development- und Staging-Umgebungen in der Regel aktiviert bleiben.
Bei bewusst öffentlich dokumentierten GraphQL-APIs kann Introspection ebenfalls sinnvoll sein. Wenn die API ohnehin öffentlich ist, stellt das Schema keine zusätzliche sensible Information dar – im Gegenteil, es kann als Live-Dokumentation dienen.
Für viele interne oder geschlossene APIs gilt jedoch eine einfache Empfehlung:
Introspection in der Produktionsumgebung deaktivieren, sofern sie nicht explizit benötigt wird.
Die meisten GraphQL-Frameworks bieten dafür einfache Konfigurationsoptionen. Zusätzlich sollten weitere Schutzmaßnahmen umgesetzt werden, etwa:
Ob eine GraphQL-API Introspection erlaubt, lässt sich mit einer einfachen Anfrage testen:
curl -X POST https://DOMAIN.TLD/graphql \
-H "Content-Type: application/json" \
-d '{"query": "{ __schema { types { name kind description fields { name type { name kind } } } } }"}'
Erhält man eine umfangreiche Antwort mit Schema-Informationen, ist Introspection aktiv.
Zusätzlich kann ein Reverse Proxy wie nginx genutzt werden, um typische Introspection-Queries zu blockieren. Eine einfache Regel könnte so aussehen:
location /graphql {
if ($request_body ~* "__schema|__type") {
return 403;
}
}
Diese Konfiguration lehnt Anfragen ab, die typische Introspection-Felder enthalten.
Wichtig: Diese Methode ist nur eine zusätzliche Schutzmaßnahme und ersetzt nicht die serverseitige Deaktivierung im GraphQL-Framework.
Passwörter allein bieten längst keinen ausreichenden Schutz mehr. Die 2FA ergänzt Logins um eine zusätzliche Sicherheitsebene und schützt effektiv vor Phishing, Datenlecks und Kontoübernahmen. Erfahren Sie, warum 2FA heute unverzichtbar ist.
Testen Sie uns 14 Tage kostenlos Jetzt testen