What he checks
Every door, every window.
Presence is not enough. A Content-Security-Policy full of 'unsafe-inline' is a lock with the key in it, so he grades the quality of each defence, not just whether it exists.
Security headers
Content-Security-Policy, Strict-Transport-Security, X-Frame-Options, Referrer-Policy, Permissions-Policy and X-Content-Type-Options.
- CSP weakened by 'unsafe-inline', 'unsafe-eval' or wildcard sources
- HSTS max-age too short, or missing includeSubDomains
- Framing protection through frame-ancestors or X-Frame-Options
P1Missing Content-Security-Policy header
Keys left in the open
He reads your page source and inline scripts for credentials that should never ship to a browser.
- Stripe live secret keys
- AWS access key IDs
- GitHub and Slack tokens
- Anthropic and OpenAI API keys
- Private key blocks
- Google API keys (flagged to check restrictions)
P0Secret exposed in page source
The back door
An opt-in probe for files that leak from misconfigured servers. It is same-origin only, makes one request per path, and runs only with your go-ahead.
.env.env.local.env.production.git/config.git/HEAD.svn/entries.hg/requireswp-config.php.bakconfig.php.bak.aws/credentials.npmrc.dockerenvdocker-compose.ymlbackup.zipbackup.sqldb.sqldump.sqlphpinfo.phpinfo.phpserver-status.DS_Store.vscode/settings.jsonconfig.jsonsecurity.txt
P0Exposed sensitive path: /.env
Cookie flags
Every Set-Cookie header is checked for the three flags that stop theft and cross-site abuse.
- Secure: never sent over plain HTTP
- HttpOnly: out of reach of injected scripts
- SameSite: blocks cross-site request forgery
P2Cookies set without HttpOnly
Other people's code
Third-party scripts are the most common way into a modern site. He checks what you load and what you leak about your stack.
- Cross-origin scripts without Subresource Integrity
- Source maps shipped to production
- Server version disclosed in headers
- Mixed content on HTTPS pages
- target="_blank" links without noopener
P2Cross-origin scripts without Subresource Integrity
The foundations
The certificate and DNS records that everything else trusts.
- SSL certificate invalid, missing or expiring soon
- DNSSEC not enabled
- No CAA record restricting who may issue certificates
- HTTP/2 and CDN presence
P0SSL certificate invalid or missing
Spoofing protection
If your domain can be spoofed, your customers can be phished in your name.
- SPF record
- DKIM record
- DMARC record, and a DMARC policy stuck on none
P1Missing DMARC record
Consent and privacy
Trackers that fire before consent are a legal risk as well as a trust one.
- Tracking that loads before consent
- No consent banner, privacy policy or cookie policy
- No data controller information
P1Tracking may load before consent
Signs of a break-in
With Search Console connected he reads Google's own verdicts, and the page checks catch the tricks hacked sites get used for.
- Search Console security issues and manual actions
- Sneaky, conditional JavaScript redirects
- Back button hijacking
- Hidden text and injected spam
P0Security issue reported by Google