Skip to contentLockpick
How it worksPricingDocs

Read

  • BlogPlain answers to common security questions
  • GuidesStep by step fixes for common setups
  • Security checksEvery check we run, explained

Learn

  • Learn with PickTwo-minute lessons on how sites get attacked
  • Lockpick for ClaudeCheck sites from Claude and other assistants
  • GlossaryThe words we use, in plain words

Company

  • ChangelogWhat changed, newest first
  • StatusWhether scans are running right now
  • Security and trustHow we check and what we never do
Sign inCheck it
Checks

Is your site sending password hashes to the browser?

By Mark KashefPublished October 8, 2026

This check flags password hashes in a page or API response anyone can read, in a known hash format. It usually means the server sends whole user records to the browser instead of the fields it needs.

What does this check look at?

It looks at whether a public page or API response contains password hashes in a known hash format. Hashes are not the passwords, but anyone holding them can guess weak passwords offline with no limit on attempts. OWASP notes that strong passwords stored with modern hashing algorithms should be effectively impossible to crack, which leaves weak passwords exposed.

Only a Deep scan runs it, after you prove you own the site.

See whether your site has this. A Deep scan walks the whole site, the scripts it loads and your API surface.

Run a Deep scan

What does a result mean?

What the report showsWhat it meansWhat to do
High findingSeveral distinct hashes appeared in a public response.Stop sending them today, then reset affected passwords.
Medium findingA single hash matched, which may be an example.Check where it came from.

Hashes are never kept or cracked, and a single match may be a documentation example. A clean result means nothing was found in what the scan read. It does not prove the problem is absent from parts the scan never sees.

How serious is a finding?

Fix this first when it is confirmed. Anyone could use a finding of this kind on their own, with no victim and no second step. Confidence starts high, because a response from your site shows the thing itself. The report lists what to fix by how directly someone could use it, not by the severity label.

What does a confirmed finding have to show?

PartFor this check
Where it startsAnyone who loads the public response
The protection that should stop itWhich user fields the server sends to the browser
What is reachedPassword hashes in a response read without signing in
What followsOffline password guessing against the affected accounts

Which standards does it relate to?

StandardReference
OWASP Top TenA01:2025 Broken Access Control
CWECWE-200
CWECWE-359

Each one is a related control, not a verification. A scan sees what anyone online can see, so it never proves a whole requirement is met.

Fix it with your AI

Return only the fields the browser needs, and test that no hash can appear again.

Fix prompt for any coding agent
My site sends password hashes to the browser: [paste the route or page from the report]. Find where user records are loaded and sent to the client (page props, server component payloads or API responses). Select only the fields the client needs, never the whole user row, using an explicit select or serializer. Add a test that fails if any response contains a bcrypt, argon2, scrypt or PBKDF2 hash. Then tell me how to force password resets for the accounts that were exposed.

How to check

Say Atlas, our example app at atlas.example, returns the full user row from its team members route. A Deep scan sees several hashes in that response and flags it without keeping any.

Deep scans come with the Deep plan, and pricing shows what it includes. Pulse or Deep explains what each scan reads, and the full list of checks shows the rest.

Questions people ask

If passwords are hashed, why is this serious?

Because hashes can be guessed offline. Anyone with the hash can try common passwords as fast as their hardware allows, with no lockout.

Did Lockpick keep or crack the hashes?

No. It matches the hash format and keeps neither the values nor the accounts they belong to.

Run this check on your site

Only a Deep scan runs this check, once you prove you own the site. Deep walks your whole site, the scripts it loads and your API surface.

Run a Deep scan

Related pages

  • Does an API route on your site answer without signing in?
  • Is a private API key sitting in your site code?
  • Can anyone read your Supabase tables with the public anon key?

Sources

  1. How we rate findings Lockpick docs, read on October 7, 2026
  2. Password Storage Cheat Sheet OWASP Cheat Sheet Series, read on October 7, 2026

About the author

Mark Kashef, Founder of Lockpick

I'm Mark, and I build Lockpick. I write these pages, and each one is checked against its sources before it goes live. The Updated date changes only when the page itself does.

Lockpick
PricingMethodologyDocsBlogGuidesSecurity checksLearn with PickSecurity and trustLockpick for ClaudeChangelogStatusFacts for AI assistants

Lockpick is a security scanner for vibe-coded apps. It checks what your live site exposes and what a GitHub repo or AI skill would do before you install it, then gives you a fix prompt for Lovable, Bolt, Replit, Cursor or Claude Code.

Lockpick assesses public pages you are authorized to test, and public GitHub code it never runs.

© 2026 LockpickTermsPrivacyContactSign in