Skip to main content

Free tool

What your response headers ask browsers to do

Seven headers that let a website constrain how browsers treat its pages. This reads what a page returns and explains each one, without dressing an absence up as a breach.

Security Exposure findings identify publicly observable indicators and do not replace an authorised penetration test.

Enter a website address. One page is requested, and nothing is stored.

Framing

Hardening, not vulnerability

Response headers are instructions to a browser. They say which scripts may run, whether the page may be framed by another site, how much information to send when a visitor follows a link away, and which device capabilities the page may request. None of them fixes a flaw in an application. What they do is limit what a flaw can be used for.

This distinction gets lost constantly, and it does real damage. Tools that grade a site an F for missing headers produce alarm out of proportion to the situation, which tends to result either in panic or — more often — in the whole category being dismissed as noise. Neither response leads to the headers being configured thoughtfully.

The proportionate view: these are cheap, they are defensive, and they are worth adding deliberately rather than urgently. A Content-Security-Policy in particular repays being written properly against what the site actually loads, and is close to worthless when copied from an example.

Reference

What each header constrains

Presence is what this check establishes. Whether the value is any good is a separate reading.

Security response headers and their effect
 What it constrainsWhat it will not do
Content-Security-PolicyWhich scripts, styles, frames and other resources a browser will load, and from where.Prevent injection. It limits what injected content can then do, which is only valuable if the policy is restrictive enough to matter.
Strict-Transport-SecurityForces browsers to use HTTPS for the domain for a stated period, removing the initial insecure request.Help a first-time visitor before the header has been received, unless the domain is on the preload list.
X-Content-Type-OptionsStops browsers guessing a file's type from its contents rather than trusting the declared type.Do anything at all if content types are declared correctly. It costs one line and covers the case where they are not.
Referrer-PolicyHow much of the current address is disclosed when a visitor follows a link to another site.Protect anything if sensitive information is placed in query strings, which is the underlying problem it mitigates.
Permissions-PolicyWhich device capabilities — camera, microphone, geolocation — the page and its embedded frames may request.Matter much on a site that embeds nothing and requests nothing. It matters considerably on one that embeds third-party frames.
X-Frame-Options / frame-ancestorsWhether other sites may embed your pages in a frame, which is what clickjacking depends on.Apply where a site legitimately needs to be embedded. The modern form is a frame-ancestors directive within the policy.
Cross-Origin-Opener-PolicyIsolates the page's browsing context from windows it opens or that opened it.Be appropriate everywhere. It can break integrations that rely on cross-window communication, so it needs testing.

Sequence

A sensible order to approach this in

Start with the ones that cannot break anything. X-Content-Type-Options and a sensible Referrer-Policy are single lines with no realistic side effects, and they can be added the same day they are discussed.

Strict-Transport-Security comes next, but with attention to the duration. A long max-age on a domain not yet fully ready for HTTPS everywhere is difficult to reverse, because browsers have already been told to remember it. Start short, confirm, then extend.

Content-Security-Policy is last and is a project rather than a line. The workable approach is to deploy it in report-only mode, collect what it would have blocked over a period covering normal site activity, resolve each case, and only then enforce. Attempting to write a restrictive policy from scratch on an established site generally ends with unsafe-inline being added to make things work again, which forfeits most of the benefit.

Same-day, no risk

  • X-Content-Type-Options
  • Referrer-Policy
  • Removing X-Powered-By
  • Suppressing the Server version

Needs testing first

  • Strict-Transport-Security duration
  • Frame restrictions where anything embeds you
  • Permissions-Policy on sites using third-party frames
  • Cross-Origin-Opener-Policy
  • Content-Security-Policy, in report-only first

Where this check stops

One page is requested, exactly as any visitor’s browser would request it, and the headers that come back are read. Nothing is probed, no input is submitted, no authentication is attempted and no weakness is tested for. The request is indistinguishable from an ordinary page view except that the user agent identifies itself honestly.

That boundary is the reason this can be offered publicly. Anything beyond it — enumerating services, testing inputs, examining anything behind authentication — requires a separate signed authorisation with a defined scope, an agreed window, named contacts and stop conditions. It is never triggered from a form on a public website, by anyone, for any domain.

Infrastructure expertise from Elite Security Europe

Elite Security Europe contributes specialist review of email authentication, DNS configuration, infrastructure posture and passive security exposure.

Common questions

Is a missing header a vulnerability?
No, and the distinction is not pedantry. A missing header means a browser has not been asked to apply a particular protection. Whether that matters depends entirely on whether the application has a weakness the protection would have limited. Content-Security-Policy reduces the impact of injected scripts; it does not create or prevent the injection. Reporting missing headers as vulnerabilities is common, alarming and wrong.
We have a Content-Security-Policy. Does that mean we are covered?
It means one is present, which is what this check can establish. A policy permitting unsafe-inline and unsafe-eval on script sources provides very little of the protection the header exists for, and a great many policies do exactly that because it is what makes an existing site keep working. Assessing whether a policy is worth anything requires reading it against what the site actually loads, which is a manual review.
Why do you flag the Server header?
Because it publishes a version number for no functional benefit, and it is trivially removable. This is genuinely low severity — it creates no weakness on its own. What it does is remove a step for anyone assembling a list of hosts running a version with a known issue. Treat it as tidying rather than as a finding of any urgency.
Can you scan our whole site?
Not from this form, and not from any public form. Active testing of infrastructure requires a separate signed authorisation naming the legal entity, the authorising individual, the exact scope, the excluded systems, the testing window and the stop conditions. That is a deliberate boundary. A tool that scanned any domain typed into it would be trivial to build and irresponsible to publish.
The result differs from another header checker.
Usually because headers differ by page, by region, or between a CDN edge and the origin. This check reads the headers returned for one address, following redirects, and identifies itself honestly rather than imitating a browser. Where a site applies headers only on some routes, checking a different route will produce a different answer — and that inconsistency is often the more interesting finding.

Headers are one signal among several

Transport configuration, DNS governance and email authentication are usually assessed together, because they are usually managed by the same people and fail in related ways.

Domain verification confirms control of an approved domain resource. It does not automatically authorise active testing of company infrastructure.