GraphQL Security Checker
Check whether a GraphQL endpoint hands out its schema.
What this tool does
Introspection
The standard schema query, which returns every type, mutation and field when it is left enabled.
Field suggestions
A misspelt field often produces "Did you mean…", which rebuilds the schema even with introspection off.
Two small queries
Ordinary GraphQL requests that read and change nothing. No load testing, no mutations.
Named remediation
The exact setting to change, per server — Apollo, Yoga and graphql-js are each different.
Frequently asked questions
What is GraphQL introspection?
A built-in query that returns the complete schema — every type, query, mutation, field and argument. It is what powers GraphiQL and code generation, and it is enabled by default in most servers. Left on in production, it hands an anonymous caller a full map of your API, including the parts not in your documentation.
Is introspection actually a vulnerability?
Not on its own — it discloses design, not data, and authorisation still applies to every field. But it removes all the work from reconnaissance, and it routinely reveals internal mutations and admin fields that were never meant to be publicly known. Most teams intend to disable it in production and simply have not.
I disabled introspection. Am I done?
Not quite. Most servers also return "Did you mean…" suggestions for misspelt fields, which lets someone reconstruct the schema field by field regardless. Disabling introspection while leaving suggestions on is a common and false sense of security, so both are checked here.
How do I turn introspection off?
Apollo Server: introspection: false in the constructor. GraphQL Yoga: the graphiql and introspection options. graphql-js directly: add NoSchemaIntrospectionCustomRule to your validation rules. Do it by environment so development keeps its tooling.
What else should I be thinking about for GraphQL?
Query depth and complexity limits, because a single nested query can be a denial of service; batching limits for the same reason; disabling GraphiQL in production; and per-field authorisation, since a single endpoint means URL-level access control does not work. This tool covers schema exposure, which is the part observable from outside.
What does this send to my endpoint?
Two small POST requests: the standard introspection query, and one deliberately misspelt field name to see whether suggestions are enabled. Both are ordinary GraphQL queries and neither reads or changes any data.
Monitor it, don't just check it
One-off checks catch what is broken today. CertNotify watches your certificates, domains, DNS and code continuously and tells you before something breaks.