critical severity

A secret key is exposed

A secret key is supposed to stay private on your server. When it ends up in the code your app ships to the browser, anyone can copy it and act as you. Here is what it means, why it happens, how to check, and how to fix it properly.

What it means

A password-like key that is supposed to stay private is sitting in your app where other people can find it. Anyone who copies it can act as you — run up bills, read your data, or send email in your name.

Why AI tools cause it

AI coding tools often paste an API key straight into a file to make something work, instead of hiding it in a private environment variable. It runs fine, so nothing warns you.

How xlogs checks it

xlogs scans your live JavaScript against 9 key formats covering Stripe, OpenAI, Anthropic, AWS, Google, GitHub, Slack, private key blocks, and Supabase service_role tokens.

Check your own app for this

Read-only. Paste your live app URL to see if this issue is present, then get the fix.

How to fix it

The goal: The key is stored only in a server-side secret / environment variable, never in code or the client bundle, and the exposed value has been rotated (regenerated) because the old one is public.

  1. Move the key's value into a server-only environment variable
  2. Remove the literal value from the code and any client-side bundle (the affected spot)
  3. Make sure the .env file is in .gitignore
  4. Rotate (regenerate) the key at the provider — assume the old one is compromised
Paste this to your AI coding tool (Lovable, Cursor, Claude Code):
In my app (the spot the scan shows): a secret key is exposed. Please make this true: The key is stored only in a server-side secret / environment variable, never in code or the client bundle, and the exposed value has been rotated (regenerated) because the old one is public. Steps: Move the key's value into a server-only environment variable; Remove the literal value from the code and any client-side bundle (the spot the scan shows); Make sure the .env file is in .gitignore; Rotate (regenerate) the key at the provider — assume the old one is compromised. Then tell me exactly what you changed, and do not print any secret values back to me.

Then verify: After you deploy the fix, xlogs re-scans your live app and your files and confirms the key is no longer present.

Common questions

What can someone do with my exposed API key?

It depends on the key, but it can be severe: charge your Stripe account, run up an OpenAI or AWS bill, read your data, or send email in your name. Treat any exposed secret key as already compromised.

Is it enough to just delete the key from my code?

No. The old value is already public (in git history, in someone's cache, or in a shipped bundle). You must rotate it: regenerate the key at the provider so the exposed copy stops working, and store the new one in a server-only environment variable.