What does "passive scanning" actually mean, and why is it legal?
The scan that never touches your backend is the one that finds the most.
That sounds backwards. Surely the deeper a tool digs, the more it finds? But the loudest, most invasive findings, the ones people picture when they hear "security scan," usually aren't the ones that get sites breached. The breaches start with things sitting in plain view, and you can read those without poking the application at all.
Here's the distinction worth getting straight, because it decides what you're allowed to point at a server and what you'd want pointed at your own.
Passive: reading what's already public
A passive scan observes. It requests the same things a browser requests and reads the answers, just with intent and a checklist. It does not try to break anything. It does not submit payloads, doesn't attempt logins, doesn't push the application into states it wasn't asked for.
Concretely, a passive external scan does this:
- Reads response headers to see what you run and whether
HSTS, aCSP, and clickjacking protection are present. - Pulls your public DNS and email records to check
SPF,DMARC,CAA, and danglingCNAMEsubdomain takeover risk. - Inspects your TLS certificate for expiry, weak protocol versions like TLS 1.0, and the subdomains listed on it.
- Fetches your shipped JavaScript and scans it for leaked secrets like
AKIA…,sk_live_,ghp_, or a Supabaseservice_roletoken. - Requests well-known paths a GET would return anyway:
/.env,/.git/config,robots.txt, a source map.
Every one of those is a normal, unauthenticated request for something you've already made retrievable. The scanner isn't exploiting a hole. It's noticing the hole is open and writing it down.
That request is the whole technique. The server chose to return the file, and reading the response it volunteered is just reading. The same thing your browser does every time it loads a page.
Active: making it do things
An active scan, the kind a pentest or a tool like a fuzzer performs, is a different animal. It sends crafted input to find out how the application behaves under stress. It tries SQL injection strings against your forms, throws XSS payloads at your inputs, attempts to log in with credential lists, walks parameters looking for ones it can tamper with, and probes whether one account can reach another's data.
Active testing finds things passive scanning can't: injection flaws, broken authorization, business-logic holes. It's genuinely valuable, and it's how you find the deep bugs. But it changes state, it can break things, and it's noisy. You run it against systems you own or have explicit written permission to test, never against someone else's.
Why passive stays on the right side of the line
The legal and ethical line is roughly the line between looking and touching. Requesting a public resource and reading what comes back is the activity every browser, search crawler, and link preview does billions of times a day. Sending payloads designed to trigger unintended behavior is unauthorized access, and that's a different thing entirely with your name on it.
This is why a passive external scanner can safely look at any site, including yours, without a contract or a maintenance window. It never asks the application to do anything it wasn't already doing for the public. There's nothing to break and nothing to authorize, because it stays on the reading side of that line the whole time.
It's also why passive scanning is honest about its ceiling. It will not find your broken access control. It won't catch a business-logic flaw in your checkout. It can't test what lives behind your login, because logging in and probing is the active side. A passive scan is the wrong tool for those, and anyone who tells you otherwise is overselling.
What this means for you
Most real breaches don't start with a clever injection. They start with an exposed /.env, a leaked key in a bundle, a missing DMARC record that let someone spoof your domain, a subdomain takeover from a dangling CNAME. All passively visible. All sitting in the open right now if they're there at all. That's the surface an attacker reads first during reconnaissance of your whole site, and it's the surface a passive scan covers completely.
That exposed /.env, the key in the bundle, the p=none DMARC, the dangling CNAME: every one of them is visible to an unauthenticated GET, which means it's visible to SurfaceCheckr. We run the passive side of the line and nothing else. We fetch your headers, DNS, TLS, and shipped JavaScript from the outside, the way a stranger would, and tell you what's already lying out there before someone else reads it first. No payloads, no login attempts, nothing installed on your end. The deep, authenticated, logic-level bugs are the pentest's job, and we won't pretend to do that work. We just catch the open-in-plain-sight problems that get exploited first, in minutes, without your permission or a maintenance window.
Find it before someone else does.
Paste your domain. The grade and issue count are free, and you'll see in a couple of minutes exactly what's reachable from outside.