-
-
Notifications
You must be signed in to change notification settings - Fork 4.8k
Description
Problem
The GraphQL Playground endpoint (mountPlayground: true) embeds the master key as a plaintext string literal in the HTML response:
'X-Parse-Master-Key': ${JSON.stringify(this.parseServer.config.masterKey)},Anyone who can reach the /playground URL gets the master key — no authentication required. While documented as a dev-only feature, this is a fundamentally problematic pattern: an unauthenticated HTTP endpoint that serves the most privileged credential in cleartext HTML.
Context
The built-in playground was introduced when GraphQL was newer and standalone tools were less mature (~2019-2020). Shipping a built-in explorer with pre-configured credentials lowered the onboarding barrier. The landscape has since changed — standalone GraphQL tools are now mature, widely available, and free. The only value the server-side playground still adds over them is auto-configured credentials, which is exactly the part that's problematic.
Parse Dashboard already ships its own GraphQL console (embedded GraphiQL) with proper authentication and does not use the Parse Server /playground endpoint. Removing the playground has zero impact on Parse Dashboard.
Proposal
Deprecate and remove the GraphQL Playground feature.
Recommended alternatives:
- Parse Dashboard — provides an integrated GraphQL explorer with proper authentication
- Third-party clients (Apollo Sandbox, GraphiQL, Insomnia, Postman) — developers can configure their own headers locally, which is a conscious choice rather than a server-side exposure
The key distinction: a developer pasting their master key into a local tool's header config is fundamentally different from the server broadcasting it over HTTP to anyone who requests a URL.
Steps
- Mark
mountPlaygroundandplaygroundPathoptions as deprecated - Log a deprecation warning when enabled
- Remove in the next major version