CORS Checker
How the checker works
The checker first follows redirects with a plain GET to find the final URL. It then sends seven GET requests and one OPTIONS preflight to that URL, each with a different Origin header, and compares Access-Control-Allow-Origin and Access-Control-Allow-Credentials across the responses. Only response headers are read. Results are cached for five minutes.
| Probe | Origin sent | Finds |
|---|---|---|
| Arbitrary origin | https://cors-probe.strix.ai | Origin reflection |
| null origin | null | Trust of sandboxed iframes and redirects |
| Host as prefix | https://<host>.cors-probe.strix.ai | startsWith or unanchored regex checks |
| Host as suffix | https://strixprobe<apex> | endsWith checks without a leading dot |
| Unknown subdomain | https://strix-cors-probe.<apex> | Wildcard subdomain trust |
| HTTP origin | http://<host> | Trust of the insecure scheme |
| Preflight | OPTIONS with PUT and custom headers | Approved methods and headers for untrusted origins |
Grades: A+ at 95 or more, A at 85, B at 70, C at 55, D at 40, E at 20, F below 20. Any untrusted origin that can read a response with credentials caps the grade at F. A wildcard * without credentials is informational, browsers never send cookies with it.
Why reflected origins matter
Browsers enforce the same-origin policy. CORS is the server telling the browser which other origins may read a response. When a server copies the request Origin into Access-Control-Allow-Origin and also sends Access-Control-Allow-Credentials: true, a page on any domain can make an authenticated request with the visitor’s cookies and read the result. On an endpoint like /api/me or /api/keys, that is account takeover in one click.
Fix checklist
- Keep an explicit allow-list of full origins, scheme included. Compare with equality, not with a regex or a substring check.
- Never add
nullto the allow-list. - Send
Vary: Originwhenever the Allow-Origin value depends on the request. - Only send
Access-Control-Allow-Credentials: trueon endpoints that need cookies from another origin. - Prefer a single API origin and same-site cookies so most endpoints need no CORS at all.
What this tool does not do
- It does not log in, so endpoints that only set CORS headers for authenticated sessions can look safe here.
- It does not read response bodies or test other methods than GET and a PUT preflight.
- It does not scan private or internal addresses.
Check the rest of the response with the security headers checker, or list every API host first with the subdomain finder.
Frequently asked questions
Keep exploring
- Security Headers Checker
Grade a site's HTTP security headers and get the fixes
Open tool - JWT Decoder & Analyzer
Decode JWTs and spot weak algorithms, expiry, and secrets
Open tool - SSL/TLS Checker
Check a certificate, its expiry, chain, and TLS protocol support
Open tool - CVE Database
Severity, EPSS, and KEV status for every CVE
Open tool
Start testing in minutes
Connect your GitHub repos and domains, and get fully set up in a few clicks.
