Skip to content

Test your website now

Free, no card. We read only public pages.

Run free audit →

Security · Low severity

Server Header Version Disclosure: Hide Unnecessary Numbers

Reduce Server header version disclosure. Configure the serving layer, verify public responses, and understand why hidden versions do not prove security.

Published · Updated

What the check tests

Check
sec.disclosure.server - Server header does not leak versions
Passes when
The Server header should not include a version number (e.g. 'nginx' is fine, 'nginx/1.14.0' is not).
Scope
graded on every page crawled
Severity
Low
Fix effort
small - under an hour
Impact when fixed
low

In one paragraph

Server header version disclosure means an observed response advertises a dotted version identifier, such as a web-server release. Remove unnecessary version detail at the component that emits it, or apply a deliberate edge policy. This is limited hardening, not a vulnerability fix. Verify actual patch status internally and inspect multiple response types after changing the public header.

Why it matters

Automated tools can use a Server value to classify targets before further probing. Exact-looking version numbers make that initial sorting easier, but they do not prove that the corresponding upstream vulnerabilities are present. Vendors can backport fixes, intermediaries can replace headers, and values can be stale or customised.

A missing banner does not make a server unidentifiable or secure. Error behaviour, protocol negotiation, application assets, and other responses can disclose the stack. Keep patching, supported software, and exposure management ahead of cosmetic concealment.

You can often remove the version while retaining the product name. That may be a proportionate result when complete removal requires unsupported modification. Avoid introducing fragile infrastructure merely to erase a low-severity fingerprint.

How WebAuditOS evaluates this finding

The supplied check reads Server on fetched responses and looks for digits separated by a dot. No header or a value without that pattern passes. A dotted number fails at low severity; unavailable responses are not graded.

It does not validate whether the number is really a software version, whether that version is patched, or which layer generated it. A bare major number can pass. API, asset, and error responses can expose different values from the HTML page, so one clean response is not estate-wide coverage.

How to fix it

  1. Inspect the exact URL and value in the evidence. Compare responses through the CDN, different application routes, and any intentionally public origin interface. Determine who creates the header before changing an unrelated service.
  2. On nginx, review the server_tokens setting. A common version-suppression setting is:
server_tokens off;

Apply it in the appropriate context, validate configuration, and inspect the public result. In a typical nginx setup this removes the release number, not necessarily the Server product name. Error-page disclosure should also be checked.

  1. On Apache, a common minimal-disclosure setup includes:
ServerTokens Prod
ServerSignature Off

These settings have distinct roles for the header and generated page signatures and belong in supported server configuration contexts, not an arbitrary content file. Confirm the behaviour on your deployed version.

  1. For IIS, Kestrel, Caddy, or another server, use its documented version-specific header controls. Do not assume a setting supported by one IIS or proxy version exists identically in another. A managed edge may emit its own product label rather than forwarding the origin's banner.
  2. If filtering at the edge, understand the boundary. A transformed public response can hide the version while an accessible origin still exposes it. Decide which endpoints should be externally reachable and test that design separately from the disclosure setting.
  3. Avoid fake version strings as a security strategy. They can mislead your inventory and do not protect an unpatched component. Keep authoritative versions in internal asset records and maintenance tooling.
  4. Validate and reload through your normal deployment workflow. Test normal pages, redirects, static files, APIs, and controlled errors with fresh requests. Cached responses can retain old headers until updated or purged.
  5. Rescan and retain a small regression test for unexpected disclosure. If a managed provider's fixed header remains, document the limitation and assess its real importance instead of claiming removal is always possible with one universal directive.

What the fix can break

Browsers do not normally need this header to render the page, so the direct user-facing risk is small. Internal inventory, monitoring assertions, or custom intermediary processing may still rely on the value. Check those owned dependencies.

A malformed server change can cause an outage unrelated to the header itself. Validate syntax, preserve known-good configuration, and check the actual delivery layer after reload.

Stripping a number must not delay security updates. A documented, maintained server that advertises a harmless label is preferable to unsupported software whose banner has been carefully hidden.

Questions

Does the version prove a known exploit will work?

No. Determine the actual installed package, patches, configuration, and exposure. A public string alone is not vulnerability verification.

Must the entire Server header disappear?

Not necessarily. Suppressing unnecessary version detail can be proportionate, and the supplied check accepts a product label without a dotted number.

Why did another URL still fail?

A different response source, host, cache entry, or error handler may emit its own header. Test representative paths and layers.

What should I review next?

Review X-Powered-By, generator tags, and directory listing.

In the report

Test this on your own site

Every scan runs sec.disclosure.server on every page it crawls, on every plan. The finding carries this id, so a line in a report can be matched to the explanation above - and the free scan needs no account.