Security report

Locked down, and proven by tests

The portals I lead hold account, payment and contract data for councils and their business customers, so security is part of the build, not a review at the end. This page shows how this site is locked down, then the practices I apply on client work.

Content policy
No inline scripts or styles
Third-party requests
None
Pinned by
26 automated tests
Last reviewed
October 2026

What this site sends with every page

Open the network tab in your browser's developer tools and you can check each of these yourself. They are applied to every response, error pages included.

Header Setting What it stops
Content-Security-Policy Same-origin only, with a fresh nonce per request. No unsafe-inline, no unsafe-eval Injected scripts and styles cannot run, even if one made it into the page
X-Frame-Options DENY, backed by frame-ancestors 'none' Clickjacking: the site cannot be embedded in someone else's page
X-Content-Type-Options nosniff Browsers guessing a file type and running it as something it is not
Referrer-Policy strict-origin-when-cross-origin Full page addresses leaking to other sites
Permissions-Policy Location, camera, microphone, payment and USB all off Any script asking for device access the site never needs
Cross-Origin-Opener-Policy same-origin Other sites keeping a handle on this window after opening it
Strict-Transport-Security One year, subdomains included, sent over HTTPS Downgrade to an unencrypted connection

How this site earns a strict policy

What I do on client portals

These are practices from the portals I lead at work. The code belongs to my employer and its clients, so they are described here, not shown.

Known limitations