Loading...
Loading...
Every control on this page is externally verifiable. Headers below are probed live from https://mnnr-app.netlify.app on every page load - no cache, no static snapshot. If a row says PASS, you can reproduce it in 30 seconds with the curl commands at the bottom.
Probed server-side from https://mnnr-app.netlify.app/ just now. Refresh the page to re-probe.
| Header | Status | Observed value |
|---|---|---|
Strict-Transport-Security HTTPS-only for at least 1 year, including all subdomains. Expected: max-age >= 31536000; includeSubDomains; preload | ✓ PASS | max-age=31536000; includeSubDomains; preload |
Content-Security-Policy Nonce-bound CSP set per-request in middleware. Blocks inline scripts/eval. Expected: no 'unsafe-inline', no 'unsafe-eval' | ✗ FAIL | (absent) |
X-Frame-Options Prevents clickjacking by disallowing framing entirely. Expected: DENY | ✓ PASS | DENY |
X-Content-Type-Options Forbids MIME-type sniffing. Expected: nosniff | ✓ PASS | nosniff |
Referrer-Policy Limits referer leakage to other origins. Expected: strict-origin-when-cross-origin (or stricter) | ✓ PASS | strict-origin-when-cross-origin |
Permissions-Policy Disables powerful browser APIs we do not use. Expected: camera=(), microphone=(), geolocation=() | ✓ PASS | camera=(), microphone=(), geolocation=(), payment=(self), usb=(), magnetometer=(), gyroscope=(), accelerometer=() |
Cross-Origin-Opener-Policy Isolates browsing context group - kills Spectre-class cross-window attacks. Expected: same-origin | ✗ FAIL | same-origin-allow-popups |
Cross-Origin-Embedder-Policy Forces explicit opt-in for cross-origin embedded resources. Expected: require-corp | ✗ FAIL | unsafe-none |
Cross-Origin-Resource-Policy Forbids other origins from loading our resources via <img>/<script>. Expected: same-origin | ✓ PASS | same-origin |
Fail-closed in production. Tokens HMAC-signed with CSRF_SECRET. Missing secret aborts boot - the app will not start without it.
lib/security.ts (source) →Upstash Redis required in production. Sensitive routes fall CLOSED (5xx) on backend error rather than open. Per-route tiers in middleware.
utils/rate-limit.ts (source) →All 7 production tables have RLS enabled. Policies bind to auth.uid() / app.current_user_id - there is no row a logged-in user can read that does not belong to them.
prisma/migrations/20260619000000_init_rls →Clerk required for /api/* and /dashboard. Unauth API requests return 401 + WWW-Authenticate: Bearer realm="mnnr-api" (not a 307 redirect).
middleware.ts (source) →On-chain transaction verification + replay protection via a unique tx_hash table. Currently feature-flagged off pending Base testnet smoke; flips to true once verified.
__tests__/unit/lib/x402-verify.test.ts →Copy these commands. No account, no API key - they all run against production right now.
401 + WWW-Authenticate):curl -sI https://mnnr-app.netlify.app/api/v1/keys | grep -iE 'HTTP|WWW-Authenticate'curl -s https://mnnr-app.netlify.app/api/health | python3 -m json.toolcurl -sI https://mnnr-app.netlify.app/ | grep -iE 'strict-transport|content-security|x-frame|x-content-type|referrer-policy|permissions-policy|cross-origin'curl -s https://mnnr.app/ | grep -c 'cf-turnstile'Required on newsletter sign-up and account sign-up. Token validation is server-side - client cannot bypass by omitting the widget.
audit_logs table records every privileged action (key issuance, role change, plan change). Append-only; immutable in production.
audit_logs migration →