1. Red
  2. Learn
  3. Website security basics

What an external website scan can't prove (and what can)

Can a website scan prove my site is secure? No. What an outside scan can see, the five things it cannot, and the owner evidence that settles each one.

By Alexander Gusev, run.cloudPublished 24 October 20268 min readHow we check facts
On this page
  1. What does an external scan actually see?
  2. What can't it prove, and why?
  3. Can a "no findings" result ever mean something?
  4. Does the host's own message settle it?
  5. What evidence does settle it?
  6. Am I affected? Where you stand right now
  7. What is an outside scan still good for?
  8. How should I use a scan result?
  9. Why not just ask for a different scanner?

No. A website scan run from outside cannot prove that a site has no weaknesses, and no honest scanner says it can. It reports what your site shows to any visitor and what public records say about those versions. Proof that a fix is installed and running comes from the server or the host: a package identifier, a restart time, a log.

FactDetailSource
What an outside scan seesHeaders, page content, exposed files, TLS, DNS, technologies and versions the site servesNIST SP 800-115 covers techniques and limits
What it cannot seePackage changelogs, which runtime serves each virtual host, worker restarts, server files, anything behind a loginSucuri, PHP notice
Result states Red usesDetected, unknown, confirmed by owner evidencethis page
Worked examplePHP2Shell, CVE-2026-109618 and CVE-2026-109619, disclosed 21 October 2026PHP notice
Checked24 October 2026this page

What does an external scan actually see?

It sees what you publish to the open internet. That is a lot: the technologies and versions your site announces, exposed .git and .env files, readable source maps, security headers, TLS settings, DNS records that point at services you no longer own, and ports reachable from outside. These are real findings, and a stranger could find them too.

Red's free scan reads the stack your site serves, the way Wappalyzer does, then looks each version up in public vulnerability records. It is a lookup. It can say a version is affected. It cannot say whether your setup is exposed.

The position it tests from is the limit. It stands where an anonymous visitor stands. Everything on the other side of that line is invisible to it, however good the scanner.

What an outside scan can see and what only the owner can see Visible from outside Versions the site announces Exposed files and directory listings Headers, cookies, CORS, TLS DNS records and open services Keys in shipped bundles Result: detected, or unknown Only the owner or host can show Package changelog naming the CVE Which runtime serves each domain Service start time after the update Server files, logs, accounts, cron Behaviour behind a login Result: confirmed by owner evidence
The dashed line is the edge of an outside scan. No scanner crosses it without access you give it.

What can't it prove, and why?

Five things recur, and PHP2Shell shows each of them in one incident.

1. That a version is fixed

Version numbers lie in both directions. Debian's security FAQ says it backports security fixes to the version in the stable release instead of upgrading, and tells readers to check the package changelog. Red Hat says that looking at the version number of a package will not tell you whether you are vulnerable, and that tools judging by version alone produce false positives.

PHP2Shell makes this concrete. CloudLinux says its packages carry the fix as a backport, so ea-php84 is 8.4.26, not 8.4.27. Canonical lists Ubuntu 22.04's fixed PHP as 8.1.2-1ubuntu2.28. An outside scan reading "8.1" or "8.4.26" sees a number below the upstream fix. The server may already hold the fix.

2. That the version it read is the one serving the request

The PHP project says its scope is all PHP installations serving web requests, including PHP-FPM, mod_php, php-cgi, FrankenPHP and LiteSpeed. A server can run several PHP builds side by side. The header a scanner reads, the version your control panel shows and the php -v result in a terminal can each describe a different one.

3. That the fix is running, not just installed

A fixed package on disk changes nothing for a worker that started before the update. Canonical says the application that uses PHP would likely need to be restarted or the system rebooted. The PHP notice itself tells owners to restart every worker after a configuration change. No outside request can read when a process started, and restarting PHP-FPM after an update has its own steps.

4. That the stack hides nothing else

A scan matches what it identifies. A hidden version, a custom build or a component behind a proxy goes unmatched, and unmatched reads the same as absent. Aikido's PHP2Shell checker says on its own page that a negative result does not prove PHP is patched, and gives patched PHP, a raised memory limit, a rejected request and an untested path as other explanations. That is a checker vendor stating the limit of its own method; what a PHP2Shell checker can confirm is set out on its own page.

5. That nothing has already happened

Absence of findings today says nothing about last week. AWS reported a PHP2Shell attempt in its honeypots on 17 October, four days before disclosure, and said it was unclear whether any would have succeeded on real systems. If a site was reachable and unpatched in that window, a later patch removes the hole and not anything planted before. Sucuri states that its remote scanner only sees the browser level and will not detect anything on the server side. Compromise evidence lives in files, logs, accounts and scheduled tasks.

Can a "no findings" result ever mean something?

It means something narrow. It says that at the time of the scan, nothing the scanner knows how to recognise from outside matched. That is useful, and the sentence has a date and a scope in it. Why a clean free scan misleads people is worth a read.

It does not mean "secure". Red never reports a site as safe or secure. A vulnerability record also lags the world: a CVE can be exploited before it is in CISA's Known Exploited Vulnerabilities catalog. CISA describes that catalog as one input to vulnerability management, not an inventory of everything exploited. At our 24 October check, neither PHP2Shell CVE was among the entries shown for 8 to 23 October, while AWS had already reported attempts. Absence from a list is not evidence of absence.

Does the host's own message settle it?

Not always, and the confusion is documented. Namecheap's status update says it installed the fixes on all shared hosting servers as soon as CloudLinux released them, and that the initial patches lacked proper version number updates, which created confusion about fix status. A customer who read the version at the wrong moment, or a scanner that did, would have drawn the wrong conclusion.

So "we patched" is a claim, not a record. The record is a dated identifier and a restart time for your domain. The wording to send a host is in a message you can send your host, and the version trap is unpacked in the Debian and Ubuntu backport guide.

What evidence does settle it?

Evidence has to come from inside. This table pairs each thing a scan cannot prove with the evidence that can.

QuestionWhy an outside scan can't answer itEvidence that doesWho holds it
Is the fix installed?Backports keep old numbersPackage changelog naming the CVE (checked 24 October 2026 for PHP2Shell)Owner, host
Which PHP serves this domain?Several runtimes share a serverServer API and build from the web runtime, per virtual hostOwner, host
Is the fix running?Process start time is not publicService start time later than the install timeOwner, host
Was anything planted?Server files are not visibleFile, account, cron and log review from the serverOwner, host, responder
Is the origin reachable around the WAF?A WAF hides the origin by designFirewall rules that accept traffic from the proxy onlyOwner, host
Was the container rebuilt?The image is not visibleImage digest of the running containerOwner

For the PHP steps in order, see the PHP2Shell fix guide. For the wider question of whether a WAF closes the gap, see does a WAF stop PHP2Shell.

Am I affected? Where you stand right now

Am I affected? Where you stand right now

An outside check can place you in the first two states. Only evidence from your server or host places you in the third.

  1. Detected The scan saw a component and a version below the fixed release for its branch. Treat it as exposed until the host or server says otherwise. Patch and restart, or ask the host for the build and restart time.
  2. Unknown The version is hidden, could be a backport, or you cannot tell which runtime serves this domain. This is the common case, and a scan with no findings lands here. Get the package identifier and the service start time from whoever runs the server.
  3. Confirmed by owner evidence You hold the package changelog or build identifier naming the CVE, and a restart or redeploy time after it. The runtime is patched. Whether anything got in earlier is a separate question.

No scan, ours included, moves you from "unknown" to "confirmed".

What is an outside scan still good for?

Plenty, as a first look. It shows what a stranger sees before anyone has to log in anywhere. It finds files that should never be public, keys shipped in a bundle, a panel left online, a certificate about to expire. It gives you a short list of questions, and a dated note of what was and was not visible.

Red's free scan is one per domain with no card. You add one DNS TXT record so nobody can point it at a site that is not theirs. The full scan is $100 per scan: an AI red team lists what it can reach from outside, ranks the paths worth trying, links small findings into one path, proves access once with evidence, stops, and writes up the path and the fix. It is still an outside view, and the report states what was reached. It does not replace the server-side evidence above.

How should I use a scan result?

  • Write down the date of the scan and which findings it gave.
  • For every "unknown", name who holds the evidence: you, the host or the agency.
  • Send that person the exact question, and ask for the package or build identifier and the restart time, in writing.
  • Keep the reply with the scan. The pair is your record.
  • Review the server for what happened before the fix, which no scan covers. The step-by-step compromise response guide lists what to look for.
  • If you are unsure who owns the patching, read how patch ownership splits between you and the host.

For a consultant or auditor, the useful record has four items: the identifier, the restart time, the person who confirmed it and the date of any outside scan with what it could not see. A screenshot of a scan result is not that record.

Why not just ask for a different scanner?

A better scanner still tests from the same position, outside the server. NIST SP 800-115 treats security testing as a set of techniques, each with benefits and limitations, to be planned and combined. Credentialed scans, agent-based inventory and a host's own audit see more because they stand on the server. They need access you grant.

Pick the tool by the question. "What does a stranger see?" is an outside scan. "Is this server patched and restarted?" is a host or server question. "Could someone chain small findings into access?" is a tester question. Each is a different position, and none of them alone answers "is it secure". The other evergreen guides cover the basics.

Questions people ask

Can a website scan prove my site is secure?

No. An outside scan reads what your site shows to any visitor and compares it with public vulnerability records. A result with no findings means nothing visible was matched. It does not cover your server packages, your code, your accounts or anything that needs a login.

My scan found nothing. Does that mean I'm not hacked?

No. A remote scan sees the front of the site, not the server. Sucuri says its own remote scanner will not detect anything on the server side. Compromise evidence comes from your logs, files, accounts and scheduled tasks.

The scan says my PHP is old, but my host says it's patched. Who is right?

Both can be right. Debian, Ubuntu, Red Hat and cPanel vendors ship fixes without changing the version number. Ask the host for the package or build identifier that names the CVE and the time its workers restarted.

Is a free scan worth running if it can't prove anything?

Yes, for what it can do: show what a stranger sees, spot exposed files and old versions, and give you the right questions to ask. Treat it as a first look. It cannot move you from unknown to confirmed.

What is the difference between a vulnerability scan and a penetration test?

A vulnerability scan identifies what is present and matches it to known issues. A penetration test tries to reach something and shows how. Both are limited by what the tester can see from the position they test from.

What evidence should I keep to show a client or auditor?

Keep the dated package changelog or build identifier, the service start time after the update, who confirmed it, and the date of any outside scan with what it could not see. A screenshot of a scan alone is weak evidence.

Sources

  1. PHP security notice, 21 October 2026 (php.net)Scope is every PHP installation serving web requests; restart every worker after a configuration change. Checked 24 October 2026.
  2. GHSA-w8hw-w9fx-j79w: CVE-2026-109618 (php/php-src advisory)Affected below 8.2.35, 8.3.36, 8.4.27 and 8.5.12. Checked 24 October 2026.
  3. Debian security FAQ: version numbers and backported fixesDebian backports fixes and says to read the package changelog.
  4. Red Hat: backporting security fixesSays the version number of a package alone will not tell you if you are vulnerable.
  5. Canonical: PHP2Shell vulnerability fixes available (Ubuntu blog, 21 October 2026)Fixed packages keep distribution numbers; the application likely needs a restart or reboot.
  6. CloudLinux: fixed ea-php and alt-php packages (updated 23 October 2026)Backported packages keep version numbers below PHP's.
  7. Namecheap status update, PHP vulnerability, 21 to 22 October 2026A host's own account of version-number confusion after early patches.
  8. Sucuri SiteCheck (free remote scanner)A scanner vendor stating what a remote scan cannot see.
  9. Aikido PHP2Shell checkerA checker vendor stating that a negative result does not prove PHP is patched. Undated page, read 24 October 2026.
  10. Amazon Threat Intelligence: PHP2Shell attempts in MadPot honeypots (AWS Security Blog, 21 October 2026)Vendor telemetry; AWS says it is unclear whether early attempts would have succeeded.
  11. CISA Known Exploited Vulnerabilities catalogNot found among the entries shown for 8 to 23 October at our 24 October check.
  12. CISA: about the Known Exploited Vulnerabilities catalogDescribes the catalog as one input to vulnerability management, with entry criteria.
  13. NIST SP 800-115: Technical Guide to Information Security Testing and Assessment (September 2008)Standard reference on planning security tests and the benefits and limitations of each technique.

Facts on this page are dated and point at the primary source next to them. If a vendor status changes after the date shown, the vendor's page wins; tell us at support@run.cloud and we will update it.