All 249 rules. Printed, not promised.
Security vendors like to say “thousands of checks”. Here is the actual list, with the id each rule stamps onto the finding it raises, so you can check any claim on this site against a real result.
What an anonymous visitor can reach. No account, no agent, nothing installed.
A headless Chromium walks your routes, cold and through client navigation, and records every request it makes.
Taint analysis over your TypeScript, the protections a file can switch off, secrets, and dependency advisories for npm, PyPI, Go, RubyGems, Packagist, crates.io and Maven.
The files that decide how your app is actually deployed, and the pipeline that deploys it.
How easy the code is to change, measured against the bar we hold our own code to: duplicated functions, constants scattered across files, files and functions grown past reading, calls made one at a time that could be one, boundaries crossed by an import, exports nobody uses. Shown in its own section and never counted as a security issue.
The files the analyzers above cannot open - Python, Go, Java, Ruby, PHP, Rust - read by a model, and anything it flags checked again by a second one before it reaches you. The first eight are defects; the rest are things worth doing, kept apart because a suggestion should never be dressed as a vulnerability. Optional, paid in credits, and it reports nothing unless both models agree.
What an anonymous visitor can reach. No account, no agent, nothing installed.
- HTTPS is not availablefreeruntime.transport.https-unavailable
- HTTP is not redirected to HTTPSfreeruntime.transport.http-not-redirected
- Certificate is invalidfreeruntime.transport.certificate-invalid
- Certificate expires soonfreeruntime.transport.certificate-expiring
- HTTPS page loads HTTP resourcesfreeruntime.transport.mixed-content
- Content-Security-Policy missing or unsafefreeruntime.headers.csp-missing-or-unsafe
- HSTS missing or too weakfreeruntime.headers.hsts-missing-or-weak
- Page can be framed by anyonefreeruntime.headers.clickjacking-unprotected
- MIME sniffing is not disabledfreeruntime.headers.x-content-type-options-missing
- Referrer policy leaks URLsfreeruntime.headers.referrer-policy-missing
- Permissions-Policy not setfreeruntime.headers.permissions-policy-missing
- COOP missingfreeruntime.headers.cross-origin-opener-policy-missing
- CORP missingfreeruntime.headers.cross-origin-resource-policy-missing
- Server version disclosedfreeruntime.headers.server-version-disclosure
- Session cookie without Secure / HttpOnly / SameSitefreeruntime.cookies.sensitive-cookie-unprotected
- CORS reflects any origin with credentialsfreeruntime.cors.dangerous-origin-policy
- Credential shipped in public JavaScriptfreeruntime.javascript.credential-exposed
- Source maps publishedfreeruntime.javascript.source-map-exposed
- Software in use no longer receives security updatesfreeruntime.technology.end-of-life
- A library the page loads has a published vulnerabilityfreeruntime.technology.known-vulnerable-version
- Exposed .env, .git, backups, dev toolsfreeruntime.exposure.sensitive-path-public
- Data backend reachable from the browserfreeruntime.exposure.browser-data-backend
- CDN code loads without an integrity hashfreeruntime.html.subresource-integrity-missing
- Production page points at a dev hostfreeruntime.html.internal-host-referenced
- Embedded frame granted camera, mic or locationfreeruntime.html.iframe-delegates-device-access
- A form submits to another companyfreeruntime.html.form-posts-cross-origin
- CSP only in markup, not in the responsefreeruntime.html.csp-only-in-meta
- Session cookie without a __Host- namefreeruntime.cookies.missing-host-prefix
- Session cookie shared with every subdomainfreeruntime.cookies.scope-too-broad
- Session cookie valid for over a yearfreeruntime.cookies.session-lifetime-excessive
- CSP only reports, never blocksfreeruntime.headers.csp-report-only-only
- CSP leaves base-uri and form-action openfreeruntime.headers.csp-missing-injection-guards
- CORS response cacheable for the wrong sitefreeruntime.headers.cors-vary-origin-missing
- DNS name points at a host nobody ownsfreeruntime.dns.dangling-cname
- CAA record forbids the current certificate issuerfreeruntime.dns.caa-excludes-issuer
- www and bare domain do not lead to the same sitefreeruntime.dns.www-apex-inconsistent
- Mail domain has no SPF recordfreeruntime.email.spf-missing
- SPF record is invalid or lets anyone sendfreeruntime.email.spf-invalid
- Mail domain has no DMARC policyfreeruntime.email.dmarc-missing
- DMARC policy only monitorsfreeruntime.email.dmarc-not-enforced
- robots.txt blocks every crawlerfreeruntime.seo.robots-blocks-everything
- Home page is marked noindexfreeruntime.seo.page-marked-noindex
- Canonical URL points somewhere wrongfreeruntime.seo.canonical-broken
- Sitemap does not match the sitefreeruntime.seo.sitemap-broken
- Home page has no title or descriptionfreeruntime.seo.title-or-description-missing
- Structured data does not validatefreeruntime.seo.structured-data-invalid
- Social preview image does not loadfreeruntime.seo.social-preview-broken
- Doctype, lang, charset or viewport missingfreeruntime.html.document-basics-missing
- security.txt expired or has no contactfreeruntime.wellknown.security-txt-stale
- Server answers TRACEfreeruntime.http.trace-enabled
- Error page shows a stack trace or debuggerfreeruntime.http.error-page-leaks-internals
- Missing pages answer 200freeruntime.http.soft-404
- Missing pages redirect to the home pagefreeruntime.http.missing-page-redirects-home
- Redirect loopfreeruntime.http.redirect-loop
- Unknown API route answered with HTML or the app shellfreeruntime.http.api-unknown-route-misbehaves
- Missing JavaScript files return an HTML pagefreeruntime.http.missing-asset-returns-html
- Server errors are cacheablefreeruntime.http.error-response-cached
- Home page links to missing pagesfreeruntime.http.broken-internal-links
- HTML served uncompressedfreeruntime.http.html-not-compressed
- Page with a session cookie is publicly cacheablefreeruntime.caching.personalized-response-cacheable
- Payment provider wired in test modefreeruntime.environment.test-mode-payment-configuration
- Placeholder or default page contentfreeruntime.environment.placeholder-content
Not everything we find is a vulnerability.
A finding says which domain it belongs to, so a slow route and a leaked key are never filed under the same word.
- Security
Something that lets someone do what they should not be able to do.
- Privacy
Personal data going somewhere it was not meant to go.
- Performance
Work your application does that it does not need to do.
- Cost abuse
A way for a stranger to spend your money: no rate limit, an open API.
- Reliability
Things that are simply broken in production, in front of users.
- Code quality
How easy the code is to change: duplication, size, calls, structure. Kept apart from security, never counted as an issue.
Sixteen keys we can name.
The secret scanner reads your JavaScript bundles, every push, commit messages and bounded git history. What it can identify, it names - and masks before storing it.
Anything shaped like a credential but unnamed is still reported, at a lower confidence, with the reason stated: we can see the name says secret, we cannot see whether the value is live.
Which stage runs which rules
A rule belongs to a stage. When a stage is skipped - a site that will not load, a repository that is not connected - the report says which rules therefore did not run.
- 01Reaching the siteDISCOVERY
- 02Checking HTTPSTLS
- 03Detecting the stackTECHNOLOGY_DETECTION
- 04Inspecting security headersHEADERS
- 05Checking cookiesCOOKIES
- 06Reading DNS and mail recordsDNS
- 07Reading the page head and structureHTML_DOCUMENT
- 08Reading robots.txt, sitemaps and security.txtWELL_KNOWN
- 09Checking methods and compressionHTTP_BEHAVIOR
- 10Testing how missing pages are answeredERROR_PAGES
- 11Testing cross-origin rulesCORS
- 12Scanning JavaScript for secretsJAVASCRIPT
- 13Probing exposed filesPUBLIC_FILES
- 14Watching the site in a real browserBROWSER_RUNTIME
- 15Measuring the loadPERFORMANCE
- 16Matching advisoriesADVISORIES
- 17Classifying the changeCHANGE_CLASSIFICATION
- 18Reading the diff for secretsSOURCE_SECRETS
- 19Resolving lockfilesDEPENDENCIES
- 20Tracking input through the codeSOURCE_ANALYSIS
- 21Walking git historySOURCE_HISTORY
- 22Reading source no rule coversSOURCE_AI_REVIEW
- 23Correlating findingsCORRELATION
- 24Scoring riskRISK_SCORING
- 25Preparing your reportREPORT
Pick a rule. Then check it.
Run the free scan and compare what comes back against this page. Every finding names the rule that raised it.