GetPentest

Web application security testing

Web application testing is the one category where the gap between a tool and a person is widest, because the flaws that matter most are flaws in logic your application was designed to have.

Last reviewed 2026-08-16Written by Jacob Masse, TrazTech Inc.

Web application security testing is manual testing of a running application by someone logged in as your users, looking for ways to do things those users should not be able to do. It costs $10,000 to $30,000 CAD for a typical authenticated test of a single product, and the reason it costs more than a network test is that there is no tool that can do the important half of it.

A scanner knows what a SQL injection looks like. It does not know that a project manager should not be able to read the payroll export, because only you know that. Broken authorization is the most commonly exploited class of application flaw and the one automation reliably misses, and it is the single best reason to pay a person.

What a proper web application test covers

Test areas and what a person adds over a scanner
AreaWhat is examinedTool or human
Authentication Login, session handling, password reset, multi-factor bypass, token lifetime Mostly human
Authorization Role boundaries, direct object references, tenant isolation, privilege escalation Human only
Business logic Workflow steps skipped, negative quantities, price manipulation, race conditions Human only
Injection SQL, command, template and object injection, deserialization Tool assisted, human verified
Client side Cross-site scripting, cross-site request forgery, clickjacking, content security policy Tool assisted
Server side request forgery Reachability of internal services and cloud metadata endpoints Mostly human
File handling Upload validation, path traversal, stored file access control Mostly human
Configuration and dependencies Headers, TLS, exposed debug interfaces, outdated components Tool

Notice how much of the table is human-only work. That distribution is the whole argument. If a firm's report is dominated by the bottom rows, you paid application testing rates for infrastructure hygiene.

Authenticated testing, and why it doubles the price

An unauthenticated test looks at the application the way an anonymous stranger sees it. That is a small surface: a marketing site, a login page, a password reset flow, maybe a public API. It is worth testing and it is not where your risk lives.

An authenticated test requires credentials for each role, and the work multiplies in two directions. First, each role sees a different application, so each has to be tested. Second, and more importantly, the interesting testing happens between roles: taking a request that a high-privilege user is allowed to make, replaying it as a low-privilege user, and seeing what comes back.

In a multi-tenant product the same exercise runs across tenants. Two accounts in two different customer organizations, and then a methodical attempt to make one read, modify or delete the other's data by changing identifiers, manipulating tokens, or calling an endpoint the interface never exposes. If you buy one thing from a web application test, buy this. Cross-tenant data access is the finding that turns into a breach notification under PIPEDA and into a mandatory report to the Quebec regulator under Law 25.

Supply real accounts, not demo ones

Testers routinely get accounts in an empty tenant with no data and one role. That produces a test of an application nobody uses. Provision at least two accounts per role, in at least two separate tenants, populated with realistic but non-production data. This costs your team an afternoon and it is the highest-return hour you will spend on the engagement.

APIs are a separate surface

Most modern applications are a client talking to an API, and the API is where authorization is either enforced or not. Testing only through the browser interface tests the front end's opinion about what you are allowed to do, which is not a security control at all.

Give the tester the API specification. An OpenAPI document, a GraphQL schema or a Postman collection turns days of endpoint discovery into hours, and those hours go back into testing. Undocumented endpoints deserve a specific mention in scoping, because internal or legacy endpoints that no longer appear in the interface are frequently still live and frequently still authorized loosely.

GraphQL deserves its own attention. Introspection left enabled in production, query depth with no limit, and per-field authorization applied inconsistently are common and are not things a generic web scanner evaluates.

Variants of a web application test

The same core methodology adapts to several delivery shapes, and the label matters mostly for scoping and price.

Web testing variants and typical Canadian pricing, CAD
VariantWhen it fitsTypical range
Unauthenticated application testMarketing sites, brochureware, public portals$5,000 to $12,000
Authenticated single-tenant testInternal tools, one customer per deployment$8,000 to $20,000
Authenticated multi-tenant SaaS testAny product where customers share infrastructure$10,000 to $30,000
API-only testHeadless services, integration platforms$8,000 to $22,000
Mobile client plus backendConsumer or field applications, per platform$12,000 to $30,000
Secure code review alongside testingWhere source access is available and the logic is denseAdd 30 to 60 percent

Full breakdown of what moves a quote within these bands is on penetration testing cost in Canada, and the black box, grey box and white box distinction is covered on penetration testing types.

Scoping a SaaS product without paying for the wrong thing

Start from the data, not the codebase. List what a breach would expose: customer records, payment details, health information, credentials. Then trace which parts of the application can reach each of those, and scope those parts first. A product with forty screens usually has six that matter, and a test scoped to the six will be deeper than a test scoped to the forty for the same money.

Exclude what you do not control and say so in writing. Your identity provider, your payment processor and your hosted analytics are their vendors' responsibility, and testing them may breach their terms. What is in scope is your integration with them: how tokens are stored, whether webhooks are verified, whether a redirect can be manipulated.

Include the administrative interface. It is the highest-value target in most products, it is often the least reviewed code, and support consoles that can impersonate a customer account are a recurring source of serious findings.

After the report

Triage by exploitability in your environment rather than by generic score. Fix the authorization findings first, always, because they are already exploitable by anyone with a free trial account. Configuration findings and dependency updates can go into normal maintenance.

Then look for the pattern rather than the instance. One broken object reference is a bug. Four broken object references across four endpoints is an architectural finding: authorization is being applied per handler instead of centrally. Fixing the four leaves the fifth to be written next sprint. Ask the tester whether they saw a pattern, because a good one will have formed an opinion and it is often the most valuable sentence in the readout.

Get your application scoped properly

Tell us what your product does and which roles exist, and we will put a consistent scope in front of Canadian testing firms.

Get matched

Common questions

Is a web application test the same as a network penetration test?

No. A network test looks at hosts, services, patch levels and what is exposed. An application test looks at the logic of a single system while logged into it. The skills differ, the tooling differs, and a firm strong at one is not automatically strong at the other. If your product is a SaaS application, the application test is the one that matters and the network test is the supporting act.

Can we test in staging instead of production?

Yes, if staging genuinely mirrors production: same authentication, same authorization logic, same data model, same configuration. Most staging environments differ in exactly the places that matter, commonly with relaxed access control or a shared login. If yours differs, either fix the difference before the test or test production under agreed constraints.

How do we know the tester did more than run a scanner?

Read the findings. Scanner output describes categories of flaw and cites CVE identifiers. Human findings describe your application: a named endpoint, a specific role, a sequence of requests, and an impact stated in terms of your customers. If nothing in the report could only be true of your product, a tool wrote it.

How often should we test a web application?

Annually as a baseline for compliance, and after any change to authentication, the tenant model, or the permission system. Those three are where serious findings come from. A new dashboard rarely warrants a retest. A new single sign-on integration or a new customer-facing API does.

Does a bug bounty replace a penetration test?

No, and they solve different problems. A bounty gives you continuous unstructured attention from many people with no coverage guarantee, which is excellent at finding things nobody thought to look for. A penetration test gives you a defined scope, a methodology, and a report an auditor accepts. Companies with the budget run both. Companies with one budget should buy the test first, because a bounty program with no one to fix the reports becomes an inbox of unpaid obligations.