To fix a URL redirect vulnerability, you need to ensure that redirects are not blindly trusted and are properly validated. This vulnerability occurs when an application redirects users to a URL based on user input without proper validation, allowing attackers to craft malicious URLs that redirect users to phishing or malware sites.
Avoid User-Controlled Redirects
Whitelist Allowed URLs
ALLOWED_REDIRECTS = ["https://example.com", "/dashboard"]
def safe_redirect(target_url):
if target_url in ALLOWED_REDIRECTS or target_url.startswith(tuple(ALLOWED_REDIRECTS)):
return redirect(target_url)
else:
return "Invalid redirect URL", 400
Use Token-Based Redirects
Validate URL Scheme & Domain
https) and matches a trusted domain.function isValidRedirect(url) {
const allowedDomains = ["https://trusted.com", "https://yourapp.com"];
const parsedUrl = new URL(url);
return allowedDomains.includes(parsedUrl.origin) && parsedUrl.protocol === "https:";
}
Sanitize Input & Encode Properly
Use HTTP Security Headers
X-Frame-Options, Content-Security-Policy (CSP), and Referrer-Policy to mitigate risks if a redirect occurs.from flask import Flask, request, redirect, abort
app = Flask(__name__)
ALLOWED_REDIRECTS = ["/home", "/profile", "https://trusted-partner.com"]
@app.route("/redirect")
def handle_redirect():
target = request.args.get("url")
if not target:
abort(400, "No redirect URL provided")
if target in ALLOWED_REDIRECTS or any(target.startswith(allowed) for allowed in ALLOWED_REDIRECTS):
return redirect(target)
else:
abort(403, "Unsafe redirect URL")
if __name__ == "__main__":
app.run()
By implementing these measures, you can effectively mitigate URL redirect vulnerabilities and protect users from phishing or unauthorized redirection.