Coverage · public list

Exactly what we look for.And what we don’t.

A public coverage list, so nobody has to guess what a clean scan means. Every row below is a rule the scanner runs today. Live rules are established; Beta rules shipped this release and are still being tuned for false positives.

LIVE · BETA · LABELLED
18privacy rules
8in Beta
5privacy categories

Last reviewed 2026-10-13. Generated from the scanner’s own coverage list, so this page changes when the rules do.

5 rules

Personal data handling

Names, emails, IDs and request bodies ending up somewhere they shouldn’t: logs, URLs, the browser, error reports.

What we look forRuleSeverityStatus
Logs never contain secrets or passwordslog.sensitive-datawarningLive
Personal data written to logspersonal-data.loggedseriousBeta
Personal data placed in URLspersonal-data.in-urlwarningBeta
Personal data or tokens stored in the browserpersonal-data.in-client-storagewarningBeta
Request bodies or user records attached to error reportspersonal-data.unredacted-errorwarningBeta

2 rules

Tracking and analytics

Personal data handed to analytics or ad tools, and third-party trackers you may not know are there.

What we look forRuleSeverityStatus
Personal data sent to analytics or ad trackerspersonal-data.to-analyticsseriousBeta
Third-party tracking scripts are known and intendedprovenance.tracking-beaconinfoLive

1 rule

Data sent to AI providers

User records sent to an AI model provider as part of a prompt.

What we look forRuleSeverityStatus
Personal data sent to an AI model providerpersonal-data.to-aiseriousBeta

4 rules

Secrets and credentials

Keys and passwords committed to the repo, where anyone with the code can use them.

What we look forRuleSeverityStatus
Signing secrets come from configurationauth.jwt-hardcoded-secretcriticalLive
No credentials committed to sourcesecret.hardcoded-credentialcriticalLive
No .env files with values in the repositorysecret.env-committedseriousLive
Database role passwords are never sent as plaintext SQLdb.plaintext-role-passwordseriousLive

6 rules

Open access to data

Data that can be read without logging in, or by the wrong logged-in user.

What we look forRuleSeverityStatus
CORS never reflects any origin with credentialscors.permissive-credentialsseriousLive
Storage buckets readable by anyoneopen-access.public-storageseriousBeta
Firebase rules let anyone read or write dataopen-access.firebase-rulesseriousBeta
Every non-public endpoint requires authenticationroute.unauthenticatedcriticalLive
Admin endpoints are never reachable without authroute.admin-exposedcriticalLive
Record lookups by :id also check who owns the recordroute.idorseriousLive

36 rules

Supporting security checks.

These aren’t privacy leaks on their own, but they are how leaks usually start: injection, weak auth, unsafe crypto. They run on every scan.

Show all 36
What we look forRuleSeverityStatus
No dynamic code evaluationcode.evalcriticalLive
No shell commands built from user inputcode.command-injectioncriticalLive
No SQL built by string concatenationcode.sql-injectioncriticalLive
No NoSQL queries taking raw request objectscode.nosql-injectionseriousLive
No object keys written from user inputcode.prototype-pollutionwarningLive
No user input written to HTML sinksxss.dom-sinkcriticalLive
dangerouslySetInnerHTML only with sanitized inputxss.dangerously-set-htmlseriousLive
postMessage listeners check the sender originxss.message-listener-uncheckedseriousLive
postMessage targets an explicit originxss.postmessage-wildcardwarningLive
Sandboxed iframes cannot escape their sandboxframe.sandbox-escapecriticalLive
JWTs never accept the 'none' algorithmauth.jwt-none-algorithmcriticalLive
Auth decisions use verified tokens, not decoded onesauth.jwt-decode-unverifiedseriousLive
Passwords are hashed, not compared in plain textauth.plaintext-password-comparecriticalLive
No MD5/SHA-1 for security purposescrypto.weak-hashseriousLive
Tokens and secrets use a CSPRNGcrypto.insecure-randomseriousLive
No ECB mode, static IVs or deprecated cipherscrypto.weak-cipherseriousLive
TLS certificate verification stays ontls.verification-disabledseriousLive
Outbound calls use HTTPSnet.insecure-httpwarningLive
Session cookies are httpOnly and securecookie.insecure-flagsseriousLive
Express apps set security headers (helmet)headers.security-middlewarewarningLive
Renderer has no Node.js accesselectron.node-integrationcriticalLive
Context isolation stays onelectron.context-isolation-offcriticalLive
webSecurity stays onelectron.web-security-offcriticalLive
Uploads are size- and type-limitedupload.unrestrictedseriousLive
File paths are never built from user inputpath.traversalcriticalLive
Server-side requests never go to user-chosen URLsssrf.server-side-requestcriticalLive
Redirects never go to user-chosen URLsredirect.openwarningLive
Errors returned to clients hide internalserror.stack-exposedwarningLive
CI never runs untrusted PR code with secretsci.pull-request-targetcriticalLive
Third-party CI actions are pinned to a commitci.unpinned-actionwarningLive
Containers do not run as rootcontainer.root-userseriousLive
Container base images are pinnedcontainer.unpinned-basewarningLive
Production builds do not publish source mapsdebug.production-sourcemapswarningLive
Debug/development mode is not forced ondebug.dev-mode-forcedwarningLive
Write endpoints validate their inputroute.unvalidated-inputwarningLive
Login and reset endpoints are rate-limitedroute.auth-no-rate-limitwarningLive

Not in scope

  • Code quality. We don’t grade style, structure or whether your code is “good”.
  • Penetration testing. Nobody attacks your running app. We read code; we never run it.
  • Runtime monitoring. We don’t watch production traffic or your live database.
  • Legal compliance. A clean scan is not a GDPR, CCPA, HIPAA or COPPA opinion, and not legal advice.

Planned · not built yet

  • Data map from code. A records-of-processing style map of where personal data flows, generated from the code.
  • Pull request comments. Findings posted on the PR that introduced them.
  • Evidence export to Vanta and Drata. Send scan results to your compliance platform.

A clean scan means no leaks of the types listed above were found in that scan. It is not a promise that nothing can go wrong. Findings are also mapped to SOC 2 Privacy and Confidentiality criteria and GDPR Art. 25/32 as context for later audits; that mapping is explanatory, not a compliance opinion.

How a scan runs →

Your first badge is a month away

Find the leak before your users do.