Security report · first scan
example.com
Findings
11 to fixCritical 1
CriticalYour server's source code is published as a static file
Who can exploit this: Anyone on the internet
- example.com: server source code is served as static files (/app.js) -- anything saved in that folder (uploads, exports, backups) is downloadable by name
1 file with server-only code
What it means
Files like server.js are downloadable, which means the folder your server runs from is also the public web folder. Anyone can read your backend code, and anything the app saves in that folder (uploads, exports, backups, .env) is downloadable by name.
How to fix
- Serve static files from a dedicated folder (e.g. public/ or dist/), never from the project root.
- Check what else lives in that folder (.env, uploads, exports) and rotate any secret.
- Run the recheck.
Fix prompt for your AI assistant
Prompts for other AI tools
Lovable
Bolt
Cursor
High 2
HighA library with known vulnerabilities is in use
Who can exploit this: Anyone on the internet
- zod 4.4.3: GHSA-mrhx-c7xc-m3w5 (CVE-2023-54404) -- Zod can exhaust memory while validating oversized constrained collections
What it means
A JavaScript library your site ships has published security advisories for this version. How exploitable it is depends on how the app uses it.
How to fix
- Update the library to a fixed version (see the advisory) and rebuild.
- Run the recheck.
Fix prompt for your AI assistant
Prompts for other AI tools
Lovable
Bolt
Cursor
HighPlain HTTP does not redirect to HTTPS
Who can exploit this: Someone on the same network as your user (public Wi-Fi)
- example.com: plain HTTP is served without redirecting to HTTPS (/ /login)
What it means
Visitors who type your address without https:// can be served an unencrypted page, which an attacker on the network can tamper with.
How to fix
- Turn on 'Force HTTPS' / 'Always use HTTPS' in your host or CDN, or add a 301 redirect from http:// to https://.
- Add HSTS (see the related finding).
- Run the recheck.
Fix prompt for your AI assistant
Prompts for other AI tools
Lovable
Bolt
Cursor
Medium 4
MediumNo Content-Security-Policy
Who can exploit this: An attacker who manages to inject a script
- Site: no Content-Security-Policy (no defence in depth against injected scripts)
What it means
A Content-Security-Policy tells the browser which scripts may run. Without one, any script an attacker manages to inject (through a comment, a profile field or a compromised library) runs with full access to your users' sessions.
How to fix
- Start with a policy like: default-src 'self'; script-src 'self'; object-src 'none'; base-uri 'self'; frame-ancestors 'self'; then add the domains your app really loads from (Supabase, analytics, fonts).
- Try it first as Content-Security-Policy-Report-Only, fix what breaks, then switch to enforcing.
- Run the recheck.
Fix prompt for your AI assistant
Prompts for other AI tools
Lovable
Bolt
Cursor
MediumNo HSTS header
Who can exploit this: Someone on the same network as your user (public Wi-Fi)
- Site: no HSTS (Strict-Transport-Security)
What it means
HSTS tells browsers to always use HTTPS for your site. Without it, a user's first visit over public Wi-Fi can be downgraded to unencrypted HTTP.
How to fix
- Send Strict-Transport-Security: max-age=31536000; includeSubDomains on every HTTPS response.
- Run the recheck.
Fix prompt for your AI assistant
Prompts for other AI tools
Lovable
Bolt
Cursor
MediumOther sites can embed your pages (clickjacking)
Who can exploit this: A malicious site your logged-in users visit
- Site: can be framed by any site (no X-Frame-Options or frame-ancestors) -- clickjacking
What it means
A malicious site can load your app invisibly in a frame and trick logged-in users into clicking buttons they can't see, such as 'delete' or 'transfer'.
How to fix
- Send Content-Security-Policy: frame-ancestors 'self' (and X-Frame-Options: DENY for older browsers).
- Run the recheck.
Fix prompt for your AI assistant
Prompts for other AI tools
Lovable
Bolt
Cursor
MediumOutdated encryption protocols are accepted
Who can exploit this: Someone on the same network as your user (public Wi-Fi)
- example.com: obsolete protocol accepted: TLS 1.0, TLS 1.1
What it means
TLS 1.0 and 1.1 have known weaknesses and are retired by all major browsers.
How to fix
- Allow only TLS 1.2 and 1.3 in your server or CDN settings.
- Run the recheck.
Fix prompt for your AI assistant
Prompts for other AI tools
Lovable
Bolt
Cursor
Low 4
LowDMARC is monitor-only
Who can exploit this: Anyone sending email
- DMARC is monitor-only (p=none): forged @example.com email is still delivered -- move to p=quarantine, then p=reject
What it means
Your DMARC policy is p=none, so forged email is still delivered.
How to fix
- Move to p=quarantine, then p=reject once your legitimate senders pass.
LowHosting control panel login faces the internet
Who can exploit this: Anyone on the internet
- Hosting control panel login reachable from the internet: cPanel (:2083, 200), WHM (:2087, 200), Webmail (:2096, 200) -- use a strong password and 2FA, or limit it to your IPs
What it means
The login page of your hosting control panel (cPanel, Plesk…) is reachable by anyone, so its password is the only thing protecting your whole server.
How to fix
- Use a long unique password and enable two-factor authentication.
- If your host allows it, restrict the panel to your IP addresses.
LowNo Referrer-Policy
Who can exploit this: Attackers mapping your site for weak spots
- Site: no Referrer-Policy
What it means
Without a Referrer-Policy, full page URLs (which can contain IDs or tokens) may be sent to other sites your pages link to.
How to fix
- Send Referrer-Policy: strict-origin-when-cross-origin.
- Run the recheck.
Fix prompt for your AI assistant
Prompts for other AI tools
Lovable
Bolt
Cursor
LowNo X-Content-Type-Options header
Who can exploit this: An attacker who manages to inject a script
- Site: no X-Content-Type-Options: nosniff
What it means
Without nosniff, browsers may guess file types, which can turn an uploaded file into running script.
How to fix
- Send X-Content-Type-Options: nosniff on every response.
- Run the recheck.
Fix prompt for your AI assistant
Prompts for other AI tools
Lovable
Bolt
Cursor
For your information 9
InfoA firewall blocked some file checks
Who can exploit this: Nobody directly; good practice
- A server-side filter (406, e.g. ModSecurity) blocked 2 probe(s) -- those files were not tested
What it means
A web application firewall answered 406 to some probes, so those paths were not tested. That is fine; it just limits what this scan could see.
InfoInline scripts without a nonce
Who can exploit this: Nobody directly; good practice
- Page has 3 inline script(s) without a nonce: a strict CSP needs nonces or hashes for them
What it means
Not a vulnerability by itself, but a strict Content-Security-Policy will need nonces or hashes for these scripts.
InfoNo CAA record
Who can exploit this: Nobody directly; good practice
- No CAA record (any certificate authority may issue for example.com)
What it means
A CAA DNS record limits which certificate authorities may issue certificates for your domain. Optional hardening.
How to fix
- Add a CAA record for the authority you use, e.g. 0 issue "letsencrypt.org".
InfoNo Permissions-Policy
Who can exploit this: Nobody directly; good practice
- Site: no Permissions-Policy
What it means
A Permissions-Policy switches off browser features (camera, microphone, location) your site doesn't use, limiting what an injected script could do.
How to fix
- Send e.g. Permissions-Policy: camera=(), microphone=(), geolocation=() for features you don't use.
Fix prompt for your AI assistant
Prompts for other AI tools
Lovable
Bolt
Cursor
InfoNo security.txt
Who can exploit this: Nobody directly; good practice
- No /.well-known/security.txt (how researchers can report issues)
What it means
/.well-known/security.txt tells people who find a vulnerability how to report it to you, instead of posting it publicly.
How to fix
- Publish /.well-known/security.txt with a Contact: line (email or URL) and an Expires: date.
Fix prompt for your AI assistant
Prompts for other AI tools
Lovable
Bolt
Cursor
InfoOther hosts were not scanned
Who can exploit this: Nobody directly; good practice
- The app talks to other hosts on your domain that this scan did not test: api.example.com -- add and verify each one to include it
What it means
Your app talks to other hosts on your domain. They were not tested because only the verified host is scanned. Add and verify them to cover your whole app.
InfoOther live hosts appear in certificate logs
Who can exploit this: Nobody directly; good practice
- Live hosts in certificate logs that this scan did not cover: www.example.com -- an entry point worth its own (verified) check
What it means
Public certificate logs list these hosts on your domain. Each one is a way in that deserves its own check.
InfoServed through a CDN
Who can exploit this: Nobody directly; good practice
- Served through Cloudflare
InfoSession token appears to be stored in localStorage
Who can exploit this: An attacker who manages to inject a script
- The app appears to keep its session token in localStorage (readable by any script on the page; CSP matters more)
What it means
Anything in localStorage can be read by any script on the page. If a script is ever injected, it can steal sessions. This is common (Supabase does it by default) and makes a strong CSP more important.
How to fix
- Keep a strict Content-Security-Policy.
- If you control the backend, consider HttpOnly cookies for sessions.
Fix prompt for your AI assistant
Prompts for other AI tools
Lovable
Bolt
Cursor
Passed checks
7
- example.com: certificate chain and hostname verify
- No directory listings found
- No secret keys found in 39 JavaScript file(s)
- No public source maps
- No public API documentation found
- Error pages reveal no stack traces or paths
- SPF record published for @example.com
What we detected
Seen from outside| Layer | Component | Evidence |
|---|---|---|
| edge | Cloudflare | response headers |
| tls | certificate from Let's Encrypt | issuer of example.com's certificate |
| frontend | TanStack Router / Start (SSR) | $_TSR hydration script |
| build | Vite | hashed /assets/ files + modulepreload |
| frontend | react-dom 19.2.5 | renderer version in a bundle |
| frontend | react 19.2.5 | ships with react-dom 19.2.5 |
| frontend | zod 4.4.3 | zod 4 version object in a bundle (likely) |
| hosting | cPanel | login reachable at https://example.com:2083/ |
| hosting | WHM | login reachable at https://example.com:2087/ |
| hosting | Webmail | login reachable at https://example.com:2096/ |
This is an automated test from the outside, without logging in. It does not prove the absence of other flaws: access control between users, business logic and injection need a logged-in test.