Source Map Exposure Checker
Paste a URL. The scanner follows every sourceMappingURL your bundles advertise, probes for a readable .git directory, and reports exactly how much of your original source a stranger can reconstruct.
CHECK FOR EXPOSED SOURCE NOW
Enter your URL - we fetch every .map file your bundles reference, probe common .git and build-artifact paths, and show which original files an attacker can reconstruct.
What is source map exposure?
A source map is a .map file that reconstructs your original files (component names, TypeScript types, comments, folder structure) from the minified production bundle. Browsers load it when DevTools is open so stack traces point at real lines.
If it is served from your public web root, anyone can read it. The bundle even names its location: minifiers append a //# sourceMappingURL= comment with the exact path.
A related failure is an exposed .git directory. If the deploy copies the project folder verbatim, /.git/ goes with it. Git holds full history, so a reachable .git exposes every commit, including the one that added a key and the later one that removed it.
Why this happens in AI-generated apps
AI coding tools (Lovable, Bolt, v0, Cursor, Replit) aim for a working preview. Development-mode settings carry into the deployed build: maps stay on because they were on while iterating, and the build flag never came up in the chat.
Deploy method matters too. A drag-and-drop upload, an rsync of the project folder, or a container that copies the working tree places .git, .DS_Store, editor backups, and full build output where a browser can reach them. Platform defaults that would catch this are skipped when someone deploys the project folder instead of the build directory.
Generated source also tends to be revealing: explanatory comments, inline endpoint lists, plainly named admin routes, and client-side permission checks that document how to bypass them. See source maps and .git exposed for the full pattern, and OWASP Top 10 for AI-generated code for how it combines with the other failure modes.
What the scanner checks
REFERENCED .MAP FILES
Every sourceMappingURL in your loaded bundles is followed and fetched to confirm it is publicly readable.
UNREFERENCED MAPS
Common map paths are probed even when the comment was stripped - removing the pointer does not remove the file.
INLINE BASE64 MAPS
Maps embedded directly into the bundle as a data URI, which no server rule can block.
EXPOSED .GIT
/.git/HEAD, /.git/config, and object paths - a readable repo means full commit history.
SECRETS IN SOURCE
Recovered original files are scanned for keys, tokens, and credentials that minification had obscured.
INTERNAL URLS AND ROUTES
Admin paths, staging hosts, and internal API endpoints named in the source but never linked from the UI.
REVEALING COMMENTS
TODO and FIXME notes describing known workarounds, disabled checks, and unfinished authorization logic.
STRAY BUILD ARTIFACTS
.DS_Store, editor backups, .bak copies, and build directories left in the web root.
How it works
- Load - we fetch your URL in a real headless browser and collect every script the page requested.
- Follow - each
sourceMappingURLis resolved and fetched; common map paths are probed even when unreferenced. - Probe - known exposure paths are requested directly, including
.gitinternals and stray build artifacts. - Reconstruct and scan - recovered original files are inspected for secrets, internal URLs, and revealing comments.
- Report - each finding lists the reachable URL, what it exposes, and the build or host change that closes it.
What each exposure gives away
| Exposed path | What an attacker gets | Severity |
|---|---|---|
bundle.js.map |
Full original frontend source: files, types, comments, structure | High if source contains secrets or internal routes |
| Inline base64 map in bundle | Same as above, and no server rule can strip it | High - must be fixed at build time |
/.git/HEAD, /.git/config |
Confirms a clonable repository and reveals the remote | Critical - full history follows |
/.git/ objects |
Every commit, branch, and deleted-but-committed secret | Critical |
/.env in web root |
Live configuration and credentials | Critical - see the .env Exposure Checker |
.DS_Store |
Directory listing of the deploy folder, including unlinked paths | Medium - enables targeted probing |
*.bak, *.old, *~ |
Prior versions of config or source, often pre-hardening | Medium to high |
| Build directory in web root | Unminified output, test fixtures, and dev-only pages | Medium |
/node_modules/ served |
Dependency inventory with exact versions for CVE matching | Medium |
Common fixes
- Turn source map generation off for production builds, or generate them and upload them to your error-tracking provider instead of the web root. You keep readable stack traces without publishing your codebase.
- If maps must ship to the web root, put them behind an auth-required path or a host rule that denies
*.mapto unauthenticated requests. Deleting only thesourceMappingURLcomment leaves the file reachable. - Deploy the build output directory, never the project folder. Add
.git,.env,.DS_Store, and backup patterns to.gitignore,.vercelignore,.dockerignore, and the equivalent for your host. - Add a host rule that denies every path beginning with a dot. It covers
.git,.env, and any other dotfile. - Rotate every credential that appears in recovered source or Git history. Removing it in a later commit does not remove it from the objects an attacker already cloned.
- Treat internal URLs and admin routes found in the source as public, and confirm each one enforces server-side authorization.
- Re-scan after each deploy. A single “debug production” change can turn maps back on.
Related tools and guides
- .env Exposure Checker - the same deploy mistake that ships
.gitusually ships.env. - Token Leak Checker - finds the keys that recovered source makes obvious.
- CORS Misconfiguration Checker - test the endpoints your exposed source just revealed.
- JWT Security Checker - source often shows exactly how tokens are signed and stored.
- Package Hallucination Scanner - a readable dependency list is also a supply-chain target.
- Vibe Code Scanner - full security scan of a deployed AI-generated app.
- Source maps and .git exposed pattern - how the flaw is found and exploited in practice.
- Lovable Safety Guide - what Lovable ships insecure by default and how to fix it.
- Replit Safety Guide - common exposure patterns in Replit-deployed apps.
Common questions
What is a source map and why does exposing it matter?
Is shipping source maps always a vulnerability?
What is an exposed .git directory?
Doesn't a 403 on /.git/ mean I'm safe?
How do attackers find these files?
What does the scanner check?
Is the scan safe to run on production?
How do I stop shipping source maps?
Scan the full app, not just source
Recovered source is a map to the real bugs. The VibeEval agent tests the endpoints it reveals.
14-day free trial · No credit card · Cancel anytime