ChessUrge is in beta. Some features may change or break. Your feedback shapes the final release. Feedback →
Trust · Transparency

Security headers, checked.

These are the browser protections attached to every ChessUrge response. The report lists the current policy, whether it passes our own check, and what we still recommend.

Current posture

8 of 8 core headers pass.

This deployment is served over HTTPS, so transport-dependent headers are active. 3 hardening gaps remain, listed below.

8/ 8 core checks
Header report

What the browser receives.

Policy as of 2026-11-02
PASS
Strict-Transport-Security
max-age=31536000; includeSubDomains

Tells browsers to use HTTPS for this site for the next year, including subdomains.

Recommendation: Consider adding preload once every subdomain is HTTPS-only, then submit the domain to the HSTS preload list.

PASS
Content-Security-Policy
frame-ancestors 'self'; object-src 'none'; base-uri 'self'; form-action 'self' https://api.razorpay.com https://checkout.razorpay.com

Blocks framing by other sites, plugin content, base-tag hijacking and form posts to unknown origins.

Recommendation: Extend the policy with default-src and script-src, first in Content-Security-Policy-Report-Only, and add a reporting endpoint before enforcing it.

PASS
X-Frame-Options
SAMEORIGIN

Prevents other origins from embedding ChessUrge pages in a frame. CSP frame-ancestors provides the modern equivalent.

Recommendation: Keep both X-Frame-Options and frame-ancestors while older browsers are supported.

PASS
Referrer-Policy
strict-origin-when-cross-origin

Sends only the origin to other sites and avoids leaking private paths or query strings in the Referer header.

Recommendation: No change needed. Avoid loosening this to unsafe-url.

PASS
X-Content-Type-Options
nosniff

Stops browsers from guessing a response type and executing content as a different type.

Recommendation: No change needed.

PASS
Permissions-Policy
camera=(), microphone=(), geolocation=()

Disables sensitive browser features that ChessUrge does not need.

Recommendation: Review if a future feature needs one of these capabilities; keep the default deny otherwise.

PASS
Cross-Origin-Opener-Policy
same-origin

Isolates the browsing context from cross-origin windows, reducing cross-window attacks.

Recommendation: No change needed.

PASS
Cross-Origin-Resource-Policy
same-origin

Prevents other origins from loading ChessUrge subresources such as images and scripts.

Recommendation: Relax only for resources that must be embedded elsewhere, and prefer a dedicated public path.

Hardening backlog

Known gaps.

Not currently blocking
No default-src or script-src yetFAIL

The current CSP protects framing, plugins, the base URI and form actions, but it does not restrict where scripts, styles or images load from. A full policy is the largest remaining XSS hardening step.

Recommendation: Build a report-only policy from the scripts actually loaded (self, Google Analytics, AdSense when enabled, Cloudflare Turnstile when enabled) and enforce it after the reports are clean.

No CSP violation reportingFAIL

There is no report-uri or report-to directive, so violations are invisible unless a browser console happens to be open.

Recommendation: Add a report-to group and a small collection endpoint, then review reports before tightening directives.

HSTS preload is not requestedFAIL

The production HSTS policy has a one-year max-age and includeSubDomains, but no preload directive.

Recommendation: Add preload only after every ChessUrge subdomain is permanently HTTPS-only; preload removal is slow.

Verify it yourself

One curl command.

Security headers can change at the edge. Run this against the live host instead of trusting a page about itself.

curl -sSI https://chessurge.org | grep -iE \
  'content-security-policy|strict-transport-security|X-Frame-Options|referrer-policy|x-content-type-options'

The report reflects the SvelteKit response policy in hooks.server.ts plus the nginx edge configuration. A CDN or reverse proxy in front of the app can add, remove or rewrite headers.

Related reading

Keep going.