Module: Supabase::Rails::Web::RedirectValidator
- Defined in:
- lib/supabase/rails/web/redirect_validator.rb
Overview
Validates a ‘redirect_to` target against an origin allowlist (FR-W11, US-015). Prevents open-redirect vulnerabilities introduced via attacker-controlled `?redirect_to=` query params on OAuth start and callback URLs.
A target is accepted when it is either:
* a path (no scheme/host), e.g. `/dashboard` or `/foo?a=1`, OR
* an absolute URL whose origin (`scheme://host[:port]`) matches an
entry in `allowed_origins`.
Anything else raises ‘Supabase::Rails::AuthError(code: “INVALID_REDIRECT”)`. Origin matching is case-insensitive on scheme + host; the port must match exactly (or be the scheme default on both sides).
Class Method Summary collapse
-
.validate(uri, allowed_origins:) ⇒ String
The input target, unchanged, when valid.
Class Method Details
.validate(uri, allowed_origins:) ⇒ String
Returns the input target, unchanged, when valid.
34 35 36 37 38 39 40 41 42 43 44 45 46 47 |
# File 'lib/supabase/rails/web/redirect_validator.rb', line 34 def validate(uri, allowed_origins:) raise AuthError.invalid_redirect(uri) if uri.nil? raw = uri.to_s raise AuthError.invalid_redirect(raw) if raw.empty? parsed = parse(raw) raise AuthError.invalid_redirect(raw) if parsed.nil? return raw if path_only?(parsed) return raw if origin_allowed?(parsed, allowed_origins) raise AuthError.invalid_redirect(raw) end |