Methodology · the full rubric

40 ways to lose a point.

Forty-one findings, and we charge for forty — SameSite is reported free. That's the whole rubric: every check the scanner runs, the exact points it costs and the threshold that trips it. No weighting we won't show you, no black box. Run the same URL tomorrow and the arithmetic comes out identical.

100
Starting score
14
Checks, in 6 modules
−30
Largest single hit
0
Hidden multipliers
01 / The rules

Subtractive, and capped at zero

Every scan starts at 100 points. Points come off for each missing, misconfigured or weak control, and the total is floored at 0 — a site cannot go negative no matter how much it stacks up.

Each finding carries a severity, and severity is the whole of the weighting. There is no secondary multiplier, no per-industry curve and no adjustment for how popular the domain is.

Critical

Actively exploitable — the missing control enables a known attack class outright: XSS, machine-in-the-middle, session hijacking.

Important

Weakens an existing defence — reduces protection depth, or becomes exploitable in combination with another flaw.

Minor

Best-practice gap — recommended by the standards bodies, but not directly exploitable on its own.

02 / The grade

One scale, no curve

The letter is a direct read-off from the score — the same six bands for every site, every time. Note the shape of it: F occupies half the ruler. Fifty points of failure share one letter, while the top forty are split five ways, because the distance between a hardened site and a very good one is the part worth resolving.

78 Grade B

Drag the ruler — or use the arrow keys — to read any score

F
D
C
B
A
A+
0 — Fail100 — Clean
03 / The schedule

Every deduction, priced

All forty-one findings the scanner can raise, with the exact points each one costs — forty of them priced, one (SameSite) reported at zero. Bar length is the size of the hit; its colour is the severity. Caps shown per module are worst-case totals — most are mutually exclusive in practice, so a real scan never hits all of them at once.

03.1 / Module

HTTP Security Headers

MAX −81 PTS

When a header is present but misconfigured — a weak value rather than an absent one — its severity drops one level and the deduction is roughly halved against the missing case.

−20 Content-Security-Policy missing
−10 CSP present but weakened unsafe-inline, unsafe-eval, or a wildcard (*) in script-src
−20 Strict-Transport-Security missing
−10 HSTS max-age too short max-age below six months (15 768 000 s)
−10 X-Frame-Options missing
−5 X-Frame-Options invalid value Must be DENY or SAMEORIGIN; a CSP frame-ancestors directive is accepted as equivalent
−10 X-Content-Type-Options missing
−5 X-Content-Type-Options wrong value Must be exactly nosniff
−5 Referrer-Policy missing
−2 Referrer-Policy unsafe value Present, but not in the safe list — may leak URL parameters to third parties
−5 Permissions-Policy missing
−5 CORS wildcard — Access-Control-Allow-Origin: * Lets any origin read responses; a real risk on authenticated endpoints
−3 Server header exposes a version number e.g. nginx/1.24.0 — hands attackers a CVE list to work from
−3 X-Powered-By header present Discloses the server-side technology stack
03.2 / Module

TLS / SSL Certificate

MAX −70 PTS

Expiry, self-signed, cipher and protocol deductions are independent and cumulative — worst case, expired −30 plus self-signed −20 plus a deprecated protocol −10 plus a weak cipher −10 comes to −70. The two connection-failure paths are mutually exclusive with each other and with every certificate check: only one of them can apply per scan.

−30 Certificate expired
−20 Certificate expires within 14 days
−10 Certificate expires within 30 days
−5 Certificate expires within 60 days
−20 Self-signed certificate
−10 Deprecated TLS protocol in use SSLv2, SSLv3, TLSv1, TLSv1.1 — stacks with the cipher and expiry deductions
−10 Weak cipher suite in use RC4, DES, 3DES, NULL, EXPORT, ANON — stacks with the protocol and expiry deductions
−15 TLS handshake or certificate verification failed SSLError or a cert verification error — no other TLS deduction applies on this path
−20 HTTPS not reachable on port 443 Connection refused, timed out or unreachable — no other TLS deduction applies on this path
03.3 / Module

DNS Email & Certificate Security

MAX −15 PTS

Domain normalisation: DNS records are always queried at the apex domain. Scan www.example.com and SecureScanr resolves example.com — SPF, DMARC, DKIM, CAA and DNSSEC records live at the apex, never on the www subdomain. Subdomains are stripped automatically so the result reflects the domain's actual email posture.

−3 SPF record missing
−3 SPF record invalid, or more than one published RFC 7208 permits exactly one SPF TXT record per domain
−3 SPF weak policy +all or ?all let any sender pass SPF
−5 DMARC record missing
−3 DMARC policy set to none p=none monitors but takes no enforcement action
−5 DMARC policy unknown or invalid Any p= value outside none / quarantine / reject is treated as a missing record
−2 DKIM not detected Checked against 12 common selectors; a custom selector may not be found
−2 CAA records missing Nothing restricts which authorities may issue certificates for the domain
−3 DNSSEC not enabled Checked via DS records at the registrar
03.4 / Module

Cookie Security

PER COOKIE · UNCAPPED

These deductions apply per insecure cookie, which is why the module carries no cap — a page setting a dozen loose cookies can lose a great deal on this one module alone. SameSite is reported as a finding but does not currently affect the score.

−5 Secure flag missing Per cookie — the cookie can travel over plain HTTP
−5 HttpOnly flag missing Per cookie — the cookie is readable from JavaScript
0 SameSite=None, or SameSite absent Reported as a finding; no point deduction under current scoring
03.5 / Module

Cross-Origin Isolation

MAX −6 PTS

Modern headers, not yet universally deployed. All three score as Minor — their absence is recorded but will not sink a grade on its own. A header that is present with a weak value costs half: −1 instead of −2.

−2 Cross-Origin-Opener-Policy missing Weak value (unsafe-none): −1 pt
−2 Cross-Origin-Embedder-Policy missing Weak value (unsafe-none): −1 pt
−2 Cross-Origin-Resource-Policy missing Weak value (cross-origin): −1 pt
03.6 / Module

Page Integrity

MAX −6 PTS

Performed by parsing the HTML body of the response. Each finding is binary — deducted once, however many instances the page contains.

−2 Mixed content detected HTTP resources loaded on an HTTPS page — scripts, images, iframes
−2 Subresource Integrity (SRI) missing External scripts or stylesheets loaded without an integrity= attribute
−2 Base tag present <base href> can be hijacked to point relative links at a malicious domain
04 / Scope

Nothing here is a judgement call you can't reproduce by hand.

What the grade measures

Whether a site has deployed the standard defensive controls that are observable from outside it: HTTP security headers, TLS configuration, DNS email security, cookie hygiene and page integrity. Thresholds follow the OWASP Secure Headers Project and the Mozilla Web Security Guidelines.

What it does not

This is not a penetration test, an exploit validator or a vulnerability manager. A high score means good baseline hardening — it says nothing about application-layer flaws such as SQL injection, broken authentication, IDOR or business logic errors, none of which are visible to an automated external scan.

Run a scan and see the arithmetic →