What we check
Every check ChillScan runs on your website or app โ marketing sites, WordPress, Shopify, static pages, and apps built with Lovable, Bolt, v0, Cursor or Replit โ and why each one matters.
๐ Secrets
We search the page HTML, inline scripts, meta tags and your first-party JavaScript files for credentials that should never reach a browser.
OpenAI and Anthropic API keys
Anyone can copy them from DevTools and run up your AI bill.
Stripe secret and restricted keys (live and test)
A live secret key lets someone issue refunds, read customers and move money.
Supabase service_role JWTs and sb_secret_ keys
These bypass Row Level Security, giving full read/write access to your database.
AWS access key IDs and secret access keys
Leaked AWS keys are found and abused by bots within minutes.
GitHub tokens (ghp_, gho_, github_pat_ โฆ)
They can grant access to your private repositories.
Slack tokens
They let someone read or post in your workspace.
Private keys (e.g. Google service account PEM keys)
A private key in client code is full account access.
Firebase / Google API keys
Usually public by design, but flagged (low) so you can confirm they're restricted by domain and API.
Generic hard-coded secrets (api_key, client_secret, access_token = "โฆ")
Catches keys from services we don't have a specific rule for. Obvious placeholders and Shopify's public Storefront tokens are ignored.
๐ก๏ธ Security headers
Response headers on your page that tell browsers how to protect your visitors.
Content-Security-Policy (missing, or allowing unsafe-inline scripts)
A CSP is the main defence that stops injected scripts (XSS) from running.
Strict-Transport-Security (missing, or max-age under 6 months)
HSTS stops browsers from ever trying insecure HTTP, blocking downgrade attacks.
X-Frame-Options or CSP frame-ancestors
Without one, other sites can embed your page in an iframe and trick users into clicking (clickjacking).
X-Content-Type-Options: nosniff
Prevents browsers from guessing file types and executing something as script.
Referrer-Policy
Stops full URLs, which may contain tokens or IDs, from leaking to third-party sites.
Permissions-Policy
Lets you switch off camera, microphone, geolocation and other features you don't use (informational).
X-Powered-By
Advertising your stack and version helps attackers pick exploits (informational).
CORS: Access-Control-Allow-Origin * with credentials
Lets any website make authenticated requests on your users' behalf.
๐ HTTPS and redirects
Whether your site is served securely and reaches visitors quickly.
Page served over plain HTTP
Logins, cookies and traffic can be read or changed on public Wi-Fi.
http:// doesn't redirect to https://
Visitors who type your domain may land on an insecure version.
Redirect chains longer than 2 hops
Each hop adds latency before your page even starts loading.
Mixed content (http:// scripts, images, iframes or styles on an https page)
Browsers block or warn about them, which can break the page.
Error status (4xx/5xx) on the scanned URL
The page you're about to share isn't actually reachable.
๐ช Cookies
Cookies your page sets in its response headers.
Cookies missing the Secure or HttpOnly flag
Session cookies without them can be stolen over plain HTTP or via XSS.
๐ SEO
What search engines and link previews see in your HTML.
<title> missing, very short, or longer than 70 characters
Your title is the headline in search results and browser tabs.
Meta description
Without one, Google improvises a snippet that usually converts worse.
Open Graph tags (og:title, og:description, og:image)
Links shared on X, LinkedIn, Slack and iMessage show a bare URL instead of a preview card.
Viewport meta tag
Without it the page won't scale on phones, and mobile rankings suffer.
lang attribute on <html>
Helps screen readers and search engines understand the language (informational).
Canonical URL
Stops duplicate URLs (www vs. non-www, query strings) from splitting your ranking (informational).
<h1> heading
Search engines use it to understand what the page is about.
Page that's nearly empty without JavaScript
Many crawlers and preview bots don't run JS, so a client-rendered app can look blank to them.
noindex robots meta tag
Tells Google not to index the page โ a common leftover from staging.
robots.txt (missing, or blocking all crawlers with Disallow: /)
We only read the rules for all user agents (User-agent: *), so blocking a single bot isn't flagged.
sitemap.xml (or a Sitemap line in robots.txt)
Helps search engines discover all your pages faster.
โก Performance
Measured from our server when we fetch your page.
Server response time (over 1.2s, or over 3s)
Slow HTML delays everything else; many visitors bounce after a few seconds.
JavaScript weight (over 600 KB, or over 1.5 MB)
Heavy bundles take seconds to download and parse on mid-range phones.
HTML document over 500 KB
Often caused by inlined data or SVGs that could be cached separately.
Gzip/Brotli compression on the HTML
Uncompressed responses are 3โ5x larger over the wire.
โ ๏ธ Limits
- We don't run JavaScript. We read the HTML and download up to 25 script files, but content or keys that only appear after the page runs in a browser (or are loaded lazily) may be missed.
- Sites behind bot protection can't be scanned. If a Cloudflare challenge, CAPTCHA or similar blocks automated requests, the scan stops and tells you.
- Only the URL you enter. We check that one page (plus robots.txt, sitemap.xml and the http:// version). We don't crawl the whole site or check pages behind a login.
- Passive only. No form submissions, login attempts, fuzzing or exploit testing โ it's not a penetration test. Only scan sites you own or have permission to test.
- Performance is measured from our server, not a real browser, so it reflects response time and page weight rather than full page-load metrics.
See how your site does
Free scan in about 30 seconds. Deep Scan $12 one-time.
Scan your site freeQuestions about a check, or think we got something wrong? Email chillscanapp@gmail.com.