Safeguard
Security Guides•

How do you test for skipped steps in a checkout or signup flow?

List each step, then call later steps directly without completing earlier ones. Check that the server refuses. A QA checklist with expected results.

Safeguard Security Team
4 min read

To test for skipped steps, map each step in the flow, then send the request for a later step without completing the earlier ones. The server should refuse every time. Test with a valid session, repeat with an expired one, and record whether the system fails open, denies access or returns an error.

Why this test matters

Multi-step flows such as checkout, signup, password recovery and approvals often check rules in the user interface only. The browser shows step two after step one, so developers assume nobody reaches step three directly. An attacker does not use the browser's route.

OWASP's testing guide poses the question exactly: if authentication expects steps one, two and three in order, what happens when a user goes from step one straight to step three? Does the application fail open, deny access, or return an error?

Set up

  1. Two test accounts, a normal user and, if relevant, an admin.
  2. A tool that can replay and edit requests, such as a proxy or a command line client.
  3. A written list of the steps and what each step is supposed to establish.
  4. A clean test environment with fake data.

The checklist

  1. Record every request in the happy path. Note the endpoint, method and any token or hidden field that links steps.
  2. For each step N, try calling it in a fresh session without steps before it.
  3. Try replaying step N after the flow is finished.
  4. Try repeating step N twice in a row.
  5. Try changing values between steps: price, quantity, recipient, role.
  6. Try using a token from one account in another account's flow.
  7. Try going backwards: complete step 3, then call step 2 again.
  8. Try letting the session sit idle past its timeout, then continue.

Expected results

AttemptSafe result
Call step 3 firstRefused, nothing created
Replay a finished stepRefused or idempotent, no second effect
Repeat a stepSame outcome as once, no double charge
Change a price mid flowServer uses its own price
Use another account's tokenRefused
Go back a stepState stays consistent

The OWASP guide gives matching examples: returning to a summary page in a valid session to change an item's price before completing a purchase, and cancelling a loyalty transaction after points were added.

Recording defects

For each failure write the sequence, the account used and what was created or changed. Mention the rule that should have stopped it. Use a private ticket, as it describes a working abuse path.

Turning it into automation

Once you know the answers, automate the stable ones: an integration test that calls the later step directly and asserts a refusal. Keep the list of steps next to the test so new steps are added when the flow changes.

Some checks, like timing or parallel replay, may stay manual or need dedicated tooling. That is fine. Note them in the release checklist.

What good looks like

The server keeps its own record of progress and checks it on every request. It does not trust hidden fields or client flags. When you remove a step, the flow stops there.

Try it yourself

Click through it at your own pace, or open it full screen. Notice which checks a scan can run by itself, then add the flow rules only your team knows.

Safeguard offers a free scan for dependency findings. Flow rules remain your own tests.

Quick check

Is a skipped step test the same as a penetration test?

No. It is a focused functional check that QA can run. A penetration test covers far more ground.

Do I need production access to run it?

No. Use a test environment with fake accounts and data.

Sources

Last reviewed: 19 October 2026.

Never miss an update

Weekly insights on software supply chain security, delivered to your inbox.

Self-healing security runs on Safeguard.

Your first fix PR is minutes away.

No sales call required, even your agent can complete the purchase over MCP.