GetPentest

Web application penetration 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. It costs more than a network test because no tool can do the important half of it.

$10,000 to $30,000 Authenticated test, single product, CAD

5 to 9 days Base tester days before roles and scale

Two accounts The minimum that makes authorisation testable

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. Broken authorization is the most commonly exploited class of application flaw and the one automation reliably misses. It is the 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

Most of that table is human-only work. 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. Each role sees a different application, so each has to be tested. And 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 of the engagement.

Comparing firms for this? Tell us what you need and it goes to the ones in the directory that do this work. No charge, and no phone number required.

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. That is not a security control.

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. Mention undocumented endpoints in scoping. Internal or legacy endpoints that no longer appear in the interface are often still live and loosely authorized.

Where the API is the product rather than a layer under a browser interface, price it as its own engagement. API penetration testing covers how that is scoped and what coverage reporting should look like.

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 methodology adapts to several delivery shapes. The label matters 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. A good one will have formed an opinion, and it is often the most valuable sentence in the readout.

When a scanner is the right purchase for an application

If your application has one user role, no tenancy, no payment or health data, and nobody has asked you for a test, an authenticated automated scan run every release will find the injection flaws, the outdated components and the misconfigured headers for a fraction of the cost. Broken authorisation is the reason to pay a person, and an application with one role has almost no authorisation surface to break. Buy the scan, keep shipping, and book the manual engagement when you add the second role, the second tenant or the first enterprise customer. The distinction is set out on vulnerability assessment against penetration test.

If an enterprise customer's security schedule is the reason you are testing rather than an auditor, the clause wording decides what you buy and the tenant count in your scope decides whether the report answers their question. That is on SaaS penetration testing in Canada.

Who runs this site

TrazTech operates GetPentest and tests web applications: authenticated testing across multiple roles, authorization and tenant isolation, and the APIs behind the interface. More than 20 penetration tests delivered, and 5 CVEs credited to the practice principal. Quotes are tester days at the rates on the cost page.

Do not buy a manual engagement from anyone, TrazTech included, if your application has one role and nobody has asked you for a test. An authenticated scan every release is the right purchase in that case, for the reasons in the note above. Mobile, thick client and hardware targets are separate specializations, and a firm that does not test them regularly should say so when you ask. Mobile and thick client testing are covered on their own pages.

Get your application scoped properly

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.