Auth0 reports that over 80% of web applications use JWTs for authentication — making token leaks one of the most widespread security risks on the web. Developers treat JWTs like session cookies, but they're really self-contained access passes — and when one leaks, the attacker doesn't need your password to become you.
JWTs sitting in page source, URL parameters, or JavaScript variables. If it's on the page and it hasn't expired, anyone visiting can grab it and replay it against your API. That's instant account takeover.
An expired JWT can't be used to authenticate directly. But it still leaks your user ID, email, role, and internal API structure — useful reconnaissance for a targeted attack.
JWTs using alg: "none" or HS256 with a guessable secret. These can be forged — an attacker changes "role":"user" to "role":"admin" and the server accepts it.
That middle section is just base64 — not encrypted. Anyone can paste it into jwt.io and read the contents. If this token appears anywhere on a web page, you have a problem.
Here's something we see more often than you'd think: a developer adds console.log(token) while debugging authentication. It works, they ship the fix, and forget to remove the log statement. Now every user's JWT gets printed to the browser console — and any injected script or hidden iframe on the page can read it.
Another common one: tokens passed as URL query parameters. https://app.com/dashboard?token=eyJhbG... — this gets logged by analytics tools, proxies, browser history, and any extension with URL access. If you're storing tokens in localStorage, any XSS vulnerability on the page exposes them too.
A leaked API key is bad. A leaked JWT is often worse. Here's why:
PhishClean's JWT detection works alongside its other 13 signals. A JWT on a phishing page compounds the risk score. A JWT plus an HTTPS downgrade is a red flag that something is actively being intercepted.
PhishClean detects exposed JWTs on every page — locally, in real time. 3-day free trial, no credit card required.
Install PhishClean