开放重定向 (Open Redirect) 是指 Web 应用程序在未验证外部传入的 URL 参数值的情况下,直接将其用作重定向目标的安全漏洞。在 OWASP (Open Web Application Security Project) Top 10 中,它被归入 2025 年版排名第一的访问控制失效 (A01),对应 CWE-601 (重定向到不可信站点)。
举个例子,当访问「https://trusted-site.com/redirect?url=https://evil-site.com」时,如果 trusted-site.com 不验证 url 参数的值就执行重定向,用户以为点击的是可信域名的链接,实际上却被引导到了恶意网站。
开放重定向被钓鱼攻击利用的原因在于,可信域名的 URL 成为了链接的入口。邮件安全过滤器和用户的肉眼检查往往只看链接开头是否为正规域名,就判定为安全。
短链接服务本质上就是重定向服务,因此与开放重定向问题密切相关。恶意用户利用短链接服务创建指向钓鱼网站的链接的案例确实存在。短链接服务方面也有防范措施,但采用哪些手段、能拦下多少,通常并不对外公开。用户能够看到的措施包括重定向前显示目标链接的警告画面 (闪屏页面)、不当使用的举报窗口等。不过,具备这些功能本身并不意味着该服务发出的链接就是安全的。与其根据检测机制来推测安全性,不如依据从外部能够确认的部分来判断。
开发者防范开放重定向的方法包括:用白名单限制重定向目标、仅允许相对 URL、验证重定向目标的域名等。无论何种情况,都应避免将 URL 参数直接用作重定向目标。
看似做了验证却仍留有漏洞的情形有两种。一种是用前缀匹配来校验域名:像「https://trusted-site.com.attacker-domain.example/」这样把主机名向后延长的 URL 能通过前缀检查,因此应解析 URL 取出主机名,再与白名单做完全匹配。另一种是把所有以「/」开头的值都当作相对 URL:「//attacker-domain.example/」会被解释为协议相对 URL,浏览器将跳转到其他域名,所以以「//」开头的值必须按外部 URL 处理。