Plaintext password comparison (JS/TS)
Part of Security, which counts for 30% of the overall score. When this check fires it deducts 8 points from that category, once per scan, no matter how many places it turns up.
What it detects
A password field is compared with == or === against another value, which means passwords are stored and checked in plaintext rather than verified against a hash.
Why it matters
Comparing a password with == or === means the stored password is being checked in plaintext instead of verified against a salted hash. That implies passwords are stored recoverable, so a database leak exposes every credential directly. This is a heuristic: it flags the comparison shape and cannot tell a plaintext check from a value that already holds a hash, so confirm what is being compared.
How to fix it
Store only a salted hash (bcrypt or argon2) and verify with the library's compare function (bcrypt.compare, argon2.verify), which also runs in constant time. Never compare the raw password against a stored value with ==. Migrate existing plaintext passwords by rehashing them at the next successful login.
The paid report includes a ready-to-paste prompt for your AI coding agent for every check it finds, pointed at the exact findings from your scan. See pricing
Does your repo trip this check?
Paste a GitHub URL or drop a project folder. Scans run in your browser and take seconds.
Scan your repo