-
Security
Stop leaking which emails have accounts
Makes login, signup, and reset responses identical whether an email exists or not.
Free Prompt
Audit my app for user enumeration: places where the response reveals whether an email address or username is registered.
Check the login form ("wrong password" vs "no account found" messages), signup form ("email already in use" errors), password reset ("we sent a link" vs "no such account"), and any API endpoints that look users up. Make responses identical in wording, status code, and response time shape whether the account exists or not. For signup, the standard fix is to always show the same success-ish message ("check your email to continue") and email the existing owner a notification if the address is taken. Keep response timing similar; don't return instantly for nonexistent accounts while doing a hash comparison for real ones.
Do not change the visual design of the forms. Do not remove genuinely useful client-side validation (like email format checks). Keep error messages helpful about things that don't leak existence, like a malformed email.
List each endpoint, what it leaked, and the fix. Give me verification steps: try a registered and an unregistered email on each form and confirm the responses are indistinguishable.
What This Does / How This Helps
Makes your login, signup, and reset forms answer the same way whether an email is registered or not. Enumeration is how attackers turn your app into a lookup service. Feed it a list of emails, note which ones say "wrong password" instead of "no account," and now you have a confirmed target list for credential stuffing or phishing. It's a small leak that feeds bigger attacks. The fixes are mostly message and behavior alignment, plus the timing detail people miss: instant rejection for nonexistent accounts is itself a tell.
Want to skip doing this by hand?
Fortivibe audits your app for all of the areas these prompts cover (and more).