Find and fix, in detail

Every issue we report is something a developer can act on. Here is an example vulnerability found and fixed in code, and how we rank severity so you tackle the dangerous, quick wins first.

Find and fix, in action

Two common vulnerabilities, before and after.Pick an example, then flip the toggle to reveal the fix.

routes/users.js
1const email = req.body.email;
2const user = await db.query(
3 `SELECT * FROM users WHERE email = '${email}'`
4);

The risk. The email is glued straight into the SQL string, so a crafted value can run its own database commands.This is SQL injection.

How we rank severity

Every finding is scored by severity and by fix effort, so the report tells you not just what is wrong, but what to do first.

CriticalRemote code execution / full database takeover

An exposed SQL injection in an auth endpoint lets an attacker dump every user record or gain access to the server itself.

HighBroken authorisation / IDOR

A user changes the workspace_id in a URL to view or delete another customer's private project.

MediumXSS / missing rate limiting

No rate limit on the password-reset endpoint allows brute-force attacks, or reflected XSS steals a logged-in user's session token.

Low / Best practiceHeader misconfiguration / info disclosure

Missing HSTS headers, or verbose API error messages that leak your framework and its version to anyone probing the app.

See what a review would find on your app

Start with the free Surface Check for the outside view in about a minute. When you are ready, a full Application Security Review goes inside your app, into the access control, authentication and logic flaws a scan cannot see.