Deployed bundle check

Scan public JavaScript for exposed secrets

Scan deployed public JavaScript for secret-looking credentials. Get redacted evidence, public-versus-secret guidance, and a practical rotation plan.

Evidence
Redacted
Credential use
Never attempted
Scope
Public scripts

The focused result and highest-priority matching evidence stay in the free preview. The complete cross-category report is a one-time paid unlock.

siteguardrail ~ /new

passive

Public beta scans are passive and origin-limited. Verified-domain checks will be enabled separately.

What the scanner does

Review the code browsers receive after deployment.

Every browser can download your public JavaScript. SiteGuardrail reviews completed first-party script coverage for high-signal secret patterns and suspicious assignments, then returns redacted evidence, an affected URL, confidence, risk, and remediation. It never sends a detected value to its provider or attempts to authenticate with it.

Pattern matching can produce false positives. A finding means “review this value and context,” not “this credential has been proven valid.”

Public versus secret

Not every API-looking value belongs on the server.

ExampleBrowser-safe?What protects it
Stripe publishable keyDesigned for client useRestricted client-side capabilities
Stripe secret keyNoServer-only storage and rotation
Supabase publishable / legacy anon keyDesigned for client useRLS, grants, and authenticated user context
Supabase secret / service-role keyNoServer-only storage; it bypasses RLS
Private keys and provider tokensNoLeast privilege, vaulting, revocation, rotation

Fix the deployment path

Move privileged operations behind a server boundary.

Client-prefixed environment variables are public by design. In Next.js, values deliberately bundled for the browser must use a public boundary such as NEXT_PUBLIC_; in Vite, client code can access exposed VITE_ values. Renaming a secret does not make it safe—keep privileged values out of the client build entirely.

// Browser code calls your server route
await fetch("/api/create-payment", {
  method: "POST",
  headers: { "content-type": "application/json" },
  body: JSON.stringify({ planId }),
})

// The server route reads the secret from server-only configuration

If a real secret was shipped

Treat the deployed value as compromised.

  1. Remove it from the client bundle and deploy the corrected boundary.
  2. Revoke or rotate the old credential at the provider.
  3. Review provider and application logs for unexpected use.
  4. Reduce the replacement credential's permissions and lifetime.
  5. Purge cached assets, then rerun the checker.

Limitations

Detection is not credential validation.

SiteGuardrail does not prove a value is active, search private source repositories, execute JavaScript to uncover every lazy-loaded chunk, or test whether a credential grants access. Short, encoded, split, or unusual values may not be recognised. Review coverage warnings and use repository secret scanning as a separate control.