AppScan
Product · Live scan

A URL is enough to start.

No agent, no proxy, nothing installed. The scan reaches your app the way a visitor does - then walks it in a real browser and records every request the page makes.

01The pipeline

25 stages, in order.

Each stage does one thing and writes down what it saw. A stage that cannot run says so and the report records it as skipped, which is why a partial scan can never read as a clean one.

  • Deterministic

    The same input produces the same finding, with the rule id printed on it.

  • Bounded

    Every stage has a time and work budget. A slow target cannot hold the queue.

  • Streamed

    Progress arrives over server-sent events while it runs, step by step.

  • Recorded

    Coverage lists steps completed, failed and skipped, with notes.

scan pipeline25 stages
  1. 01
    Reaching the site
    DISCOVERY
  2. 02
    Checking HTTPS
    TLS
  3. 03
    Detecting the stack
    TECHNOLOGY_DETECTION
  4. 04
    Inspecting security headers
    HEADERS
  5. 05
    Checking cookies
    COOKIES
  6. 06
    Reading DNS and mail records
    DNS
  7. 07
    Reading the page head and structure
    HTML_DOCUMENT
  8. 08
    Reading robots.txt, sitemaps and security.txt
    WELL_KNOWN
  9. 09
    Checking methods and compression
    HTTP_BEHAVIOR
  10. 10
    Testing how missing pages are answered
    ERROR_PAGES
  11. 11
    Testing cross-origin rules
    CORS
  12. 12
    Scanning JavaScript for secrets
    JAVASCRIPT
  13. 13
    Probing exposed files
    PUBLIC_FILES
  14. 14
    Watching the site in a real browser
    BROWSER_RUNTIME
  15. 15
    Measuring the load
    PERFORMANCE
  16. 16
    Matching advisories
    ADVISORIES
  17. 17
    Classifying the change
    CHANGE_CLASSIFICATION
  18. 18
    Reading the diff for secrets
    SOURCE_SECRETS
  19. 19
    Resolving lockfiles
    DEPENDENCIES
  20. 20
    Tracking input through the code
    SOURCE_ANALYSIS
  21. 21
    Walking git history
    SOURCE_HISTORY
  22. 22
    Reading source no rule covers
    SOURCE_AI_REVIEW
  23. 23
    Correlating findings
    CORRELATION
  24. 24
    Scoring risk
    RISK_SCORING
  25. 25
    Preparing your report
    REPORT
02What it reads

Everything an anonymous visitor can reach.

Transport

HTTPS availability, certificate validity and expiry, the HTTP to HTTPS redirect, HSTS, and mixed content on a page that claims to be secure.

Headers

Content-Security-Policy quality rather than presence, clickjacking protection, MIME sniffing, referrer policy, Permissions-Policy, COOP, CORP, and version disclosure.

Cookies and CORS

Session cookies without Secure, HttpOnly or SameSite, and cross-origin rules that reflect any origin while allowing credentials.

Public JavaScript

Sixteen credential patterns across your bundles, published source maps, and keys that were never meant to leave the server.

Exposed paths

The .env file, the .git directory, backups, dumps and developer tooling that shipped with the deploy.

Data backends

A read-only probe replays a request your own page already made, using the public key your own page ships, to prove whether the data is world-readable.

03The browser pass

A real Chromium, on your routes.

Headers tell you what a server promises. A browser tells you what your application actually does - which is where the interesting problems live.

  • Routes, discovered and clustered

    The crawler finds routes, groups the ones that are the same page with different data, and records each one cold and again through client navigation.

  • Every request, attributed

    Duplicates, N+1 patterns, request storms, third-party weight, render-blocking scripts, uncached assets and oversized images.

  • How fast it actually is

    Core Web Vitals as the page reported them, the longest main-thread task, page weight and the requests behind it - measured on the free scan, not just the paid one.

  • Baselines and regressions

    Load, DOM-ready and time-to-first-byte per route are remembered, so “slower than before” is a measurement rather than a feeling.

  • What breaks in the open

    JavaScript errors, failed requests, insecure form actions, WebSockets without TLS and reconnect loops.

04Correlation

The same bug, reported once.

When the repository is connected, a runtime observation and the line of code behind it become one finding. The code finding is canonical because that is what you change; the runtime observation rides along as proof that it is real in production.

Seen at runtime
GET /api/orders?status=open
200 · 148 items · no auth header

The browser pass proves the data comes back without a session.

Found in source
api/orders/route.ts:14
export async function GET(req) {

Taint analysis proves the route has no guard before the query.

correlated
Criticalsource.authorization.unguarded-mutating-routeconfirmed live
The orders route answers anyone who asks

One finding, two proofs: the line that is missing the guard, and the response that proves it is missing in production.

Ten areas

What one URL is enough for. Nothing installed.

A header checker reads the home page once. This reads the DNS, the mail records, the files the site publishes about itself, how it answers a page that does not exist, and what a real browser sees - then says, beside each thing, what it means and how to change it.

  • Security54 rules

    TLS, headers, cookies, CORS, secrets in public JavaScript, source maps, exposed files, a debug page on the 404, tokens in web storage.

  • Domain & DNS7 rules

    A, AAAA and the CNAME chain, a dangling alias at a hosting provider, CAA against the certificate, www and apex, SPF, DMARC, MTA-STS, TLS-RPT, BIMI, DKIM.

  • SEO & indexing10 rules

    noindex, robots.txt, sitemaps, canonical, title and description, structured data, the social image, and every crawled page's outline.

  • AI discoverabilityrecorded

    What robots.txt says to seventeen AI crawlers - search and training, separately - and whether llms.txt exists. Recorded and explained, never an issue: it is your call.

  • App health12 rules

    How missing pages, API routes and assets are answered, redirect loops, cached server errors, broken links, chunks that failed to load, a page that rendered blank.

  • Accessibility4 rules

    Images without alt, controls without labels, buttons and links without a name, duplicate ids that break labels, landmarks, skip link, the heading outline.

  • Privacy5 rules

    Trackers and session replay on first load, personal data leaving for third parties, the page URL shared with trackers, a consent platform or none.

  • Performance10 rules

    Core Web Vitals from a real load, page weight, oversized images, render-blocking scripts, uncached assets, uncompressed HTML.

  • Cost & waste6 rules

    Duplicate requests, N+1 patterns, request storms, WebSocket chatter and reconnect loops, third-party weight, an SDK loaded twice.

  • Technology2 rules

    What the site is built from, matched against advisories and end-of-life dates, and what changed since the last scan.

Coverage

All 249 rules. Printed, not promised.

Every rule carries the id you see here onto the finding it raises, so you can always tell which check fired and why. Nothing in this list needs AI to run, and 110 of them run on the free scan - a URL and an email, no account, no card, no repository.

What an anonymous visitor can reach. No account, no agent, nothing installed.

  • HTTPS is not available
    free
    runtime.transport.https-unavailable
  • HTTP is not redirected to HTTPS
    free
    runtime.transport.http-not-redirected
  • Certificate is invalid
    free
    runtime.transport.certificate-invalid
  • Certificate expires soon
    free
    runtime.transport.certificate-expiring
  • HTTPS page loads HTTP resources
    free
    runtime.transport.mixed-content
  • Content-Security-Policy missing or unsafe
    free
    runtime.headers.csp-missing-or-unsafe
  • HSTS missing or too weak
    free
    runtime.headers.hsts-missing-or-weak
  • Page can be framed by anyone
    free
    runtime.headers.clickjacking-unprotected
  • MIME sniffing is not disabled
    free
    runtime.headers.x-content-type-options-missing
  • Referrer policy leaks URLs
    free
    runtime.headers.referrer-policy-missing
  • Permissions-Policy not set
    free
    runtime.headers.permissions-policy-missing
  • COOP missing
    free
    runtime.headers.cross-origin-opener-policy-missing
  • CORP missing
    free
    runtime.headers.cross-origin-resource-policy-missing
  • Server version disclosed
    free
    runtime.headers.server-version-disclosure
  • Session cookie without Secure / HttpOnly / SameSite
    free
    runtime.cookies.sensitive-cookie-unprotected
  • CORS reflects any origin with credentials
    free
    runtime.cors.dangerous-origin-policy
  • Credential shipped in public JavaScript
    free
    runtime.javascript.credential-exposed
  • Source maps published
    free
    runtime.javascript.source-map-exposed
  • Software in use no longer receives security updates
    free
    runtime.technology.end-of-life
  • A library the page loads has a published vulnerability
    free
    runtime.technology.known-vulnerable-version
  • Exposed .env, .git, backups, dev tools
    free
    runtime.exposure.sensitive-path-public
  • Data backend reachable from the browser
    free
    runtime.exposure.browser-data-backend
  • CDN code loads without an integrity hash
    free
    runtime.html.subresource-integrity-missing
  • Production page points at a dev host
    free
    runtime.html.internal-host-referenced
  • Embedded frame granted camera, mic or location
    free
    runtime.html.iframe-delegates-device-access
  • A form submits to another company
    free
    runtime.html.form-posts-cross-origin
  • CSP only in markup, not in the response
    free
    runtime.html.csp-only-in-meta
  • Session cookie without a __Host- name
    free
    runtime.cookies.missing-host-prefix
  • Session cookie shared with every subdomain
    free
    runtime.cookies.scope-too-broad
  • Session cookie valid for over a year
    free
    runtime.cookies.session-lifetime-excessive
  • CSP only reports, never blocks
    free
    runtime.headers.csp-report-only-only
  • CSP leaves base-uri and form-action open
    free
    runtime.headers.csp-missing-injection-guards
  • CORS response cacheable for the wrong site
    free
    runtime.headers.cors-vary-origin-missing
  • DNS name points at a host nobody owns
    free
    runtime.dns.dangling-cname
  • CAA record forbids the current certificate issuer
    free
    runtime.dns.caa-excludes-issuer
  • www and bare domain do not lead to the same site
    free
    runtime.dns.www-apex-inconsistent
  • Mail domain has no SPF record
    free
    runtime.email.spf-missing
  • SPF record is invalid or lets anyone send
    free
    runtime.email.spf-invalid
  • Mail domain has no DMARC policy
    free
    runtime.email.dmarc-missing
  • DMARC policy only monitors
    free
    runtime.email.dmarc-not-enforced
  • robots.txt blocks every crawler
    free
    runtime.seo.robots-blocks-everything
  • Home page is marked noindex
    free
    runtime.seo.page-marked-noindex
  • Canonical URL points somewhere wrong
    free
    runtime.seo.canonical-broken
  • Sitemap does not match the site
    free
    runtime.seo.sitemap-broken
  • Home page has no title or description
    free
    runtime.seo.title-or-description-missing
  • Structured data does not validate
    free
    runtime.seo.structured-data-invalid
  • Social preview image does not load
    free
    runtime.seo.social-preview-broken
  • Doctype, lang, charset or viewport missing
    free
    runtime.html.document-basics-missing
  • security.txt expired or has no contact
    free
    runtime.wellknown.security-txt-stale
  • Server answers TRACE
    free
    runtime.http.trace-enabled
  • Error page shows a stack trace or debugger
    free
    runtime.http.error-page-leaks-internals
  • Missing pages answer 200
    free
    runtime.http.soft-404
  • Missing pages redirect to the home page
    free
    runtime.http.missing-page-redirects-home
  • Redirect loop
    free
    runtime.http.redirect-loop
  • Unknown API route answered with HTML or the app shell
    free
    runtime.http.api-unknown-route-misbehaves
  • Missing JavaScript files return an HTML page
    free
    runtime.http.missing-asset-returns-html
  • Server errors are cacheable
    free
    runtime.http.error-response-cached
  • Home page links to missing pages
    free
    runtime.http.broken-internal-links
  • HTML served uncompressed
    free
    runtime.http.html-not-compressed
  • Page with a session cookie is publicly cacheable
    free
    runtime.caching.personalized-response-cacheable
  • Payment provider wired in test mode
    free
    runtime.environment.test-mode-payment-configuration
  • Placeholder or default page content
    free
    runtime.environment.placeholder-content

Point it at something you shipped this week.

A URL, an email, a few minutes. If nothing is wrong, the report says so in one line.