GraphQL Security Issues
Overview
GraphQL APIs have unique security risks:
- Introspection enabled in production: Reveals entire schema to attackers for reconnaissance
- Unbounded query depth:
{ user { friends { friends { friends { ... } } } } }— DoS via deeply nested queries - Batch query abuse: Unlimited query batching enables brute force and DoS
- Missing resolver-level auth: Even with authentication, each resolver must check permissions
- Verbose error messages: GraphQL errors often expose internal details
Remediation
- Disable introspection in production (
introspection: false) - Enforce query depth limits (max 5-7 levels)
- Implement query complexity limits
- Use persisted queries to restrict query set
- Add authentication checks in each resolver