Back to Technical Mode

Open Redirect

Login flows, unsubscribe links, and "continue to" pages often redirect based on a URL parameter. If that destination isn't validated, the real domain in the address bar during the initial click makes a phishing link look legitimate right up until the redirect fires.

The danger isn't the redirect itself — it's that the link starts on a domain users actually trust, which defeats the usual advice to "check the link before clicking"
Open redirects are frequently chained with OAuth token theft: an attacker crafts an authorize URL whose redirect_uri passes validation but whose final hop leaks the token
Validating that the destination is a relative path, or belongs to an explicit allowlist of domains, closes the hole
A same-site check alone is not enough — protocol-relative URLs (//evil.example) and backslash tricks (/\evil.example) are common bypasses for a naive prefix check

Want this flow explained in detail as it plays?

GET/redirect?url=https://app.flowground.dev/dashboard

Headers

Host:app.flowground.dev

Body

Loading...
Stuck? Try a hint

Defense in depth

Revealed once you've worked through the hint ladder above — try the attack yourself first.

Vulnerable vs. Fixed

app.get("/redirect", (req, res) => {
  res.redirect(req.query.url); // any absolute URL is followed as-is
});