The Six Areas We Review
This is the scope, agreed in writing before we start. Anything outside it is named as out of scope rather than quietly skipped.
Who you are versus what you may do Authentication and authorisation
We check how sessions are established, how long they last, what happens when one expires, and whether password reset and email change flows can be abused. Then, separately, whether every endpoint asks what the caller is permitted to do rather than merely who they are. Generated applications very often get authentication right and authorisation wrong, because hiding a menu feels like protecting a feature. We test by issuing privileged requests as an ordinary account.
Whether the data defends itself Database access rules
Hosted databases can enforce, at the row level, who may read or write each record. We check whether those rules are enabled, whether they actually express your ownership model, and whether any table holding personal or commercial information is readable by an anonymous or arbitrary signed in caller. This is where the most consequential findings usually sit, and it is also frequently a same day fix once the ownership model is written down properly.
What ships to every visitor Exposed secrets and keys
We inspect the client bundle, the repository history, and the hosting configuration for credentials that should never leave a server: payment provider keys, email sending keys, storage credentials, model provider keys, webhook signing secrets and service level database keys. Anything in the browser bundle is public, and credentials committed to a public repository are found by automated scanners within minutes. Findings here come with a rotation list as well as a fix.
Input handling and validation
Every field that reaches a query, a file path, an email, a template or a page gets looked at. Some of what we find is a security issue: values passed into queries without parameterisation, file uploads with no type or size limits, user supplied content rendered without escaping. Much of it is a reliability issue that presents as a mysterious bug, such as an apostrophe in a surname breaking a search. Validation belongs on the server, not only in the form.
What happens when it fails Error handling and observability
We look for failures that produce a blank screen, a spinner that never resolves, or worse, a silent success where the user believes something saved and nothing was written. We also check what your errors leak: stack traces and database messages returned to the browser tell an attacker a great deal. Finally, whether anything is recorded at all, because an application with users and no logging cannot be diagnosed after an incident, only guessed at.
What the server sends versus what the screen shows Data exposure through the interface
A screen showing a name and suburb is often fed by a response containing the whole record, and a list view often retrieves every row and filters in the browser. None of it is visible in normal use and all of it is available to anyone who opens developer tools. We map what each endpoint returns against what the interface needs, and flag anywhere personal information, internal notes, pricing or other accounts are travelling to a browser that has no business receiving them.