URL重定向漏洞

未经校验的重定向

未验证的重定向可能发生在 web 应用程序接受不可信输入时,这可能导致 web 应用程序将请求重定向到包含不可信输入的 URL。通过修改不可信的 URL 输入为恶意网站,攻击者可能成功发起网络钓鱼骗局,盗取用户凭据。

由于修改后的链接中的服务器名称看起来和原始网站相同(例如:www.example.com 和 www. eexample.com),网络钓鱼尝试可能看起来更具可信度。

安全的 URL 重定向

当我们想要自动将用户重定向到另一个页面(不需要访客的操作,例如点击超链接)时,可以实现如下代码:

Java Spring Boot

java 复制代码
@GetMapping("/")
public String home() {
    return "redirect:/login";  // 相对路径,域名是默认为当前域名
}

或者指定完整的URL

java 复制代码
@GetMapping("/")
public String home() {
    return "redirect:https://www.example.com/welcome";
}

Python Flask

python 复制代码
@app.route("/check_login")
def check_login():
    return redirect(url_for("login"))

或者指定完整的URL

python 复制代码
@app.route("/check_login")
def check_login():
    return redirect("https://www.google.com")

不安全的 URL 重定向

以下示例展示了不安全的重定向代码。

以下 Java 代码从名为 url 的参数(GET 或 POST)接收 URL 并重定向到该 URL:

java 复制代码
@Controller
public class RedirectController {
    @GetMapping("/redirect")
    public RedirectView redirectToUrl(@RequestParam("url") String url) {
        RedirectView redirectView = new RedirectView();
        redirectView.setUrl(url);
        return redirectView;
    }
}

以下 Python 代码从名为 url 的参数(GET 或 POST)接收 URL 并重定向到该 URL:

python 复制代码
@bp.route("/login", methods=["POST", "GET"])
def login():
    url = request.args.get("url")
    return redirect(url)

上述代码在未进行验证或额外方法控制的情况下容易受到攻击。这种漏洞可被用作网络钓鱼骗局的一部分,将用户重定向到恶意网站。

如果没有进行验证,恶意用户可以创建一个超链接,将用户重定向到未经验证的恶意网站。例如:

复制代码
http://example.com/login?url=http://malicious.eexample.com

防止未验证的重定向

安全使用重定向可以通过多种方式实现:

  1. 不允许用户输入目标 URL:如果必须使用重定向,确保目标 URL 不是用户输入的。
  2. 验证用户输入:通过创建一个受信任白名单 URL 列表(主机列表或正则表达式)来确保只有白名单中的域名/URL才可以被重定向。关于验证用户输入以确定 URL 是否安全并非简单任务。关于如何实现 URL 验证的详细说明,请参阅:SSRF漏洞
  3. 强制重定向经过确认页面:所有重定向应首先通过一个页面,通知用户他们将离开您的网站,并清晰显示目标,要求用户点击链接以确认。例如:CSDN 的URL重定向会出现如下提示。
相关推荐
m0_715674431 小时前
政务泛监测体系能力排行:AI 重塑监测边界,治理的颗粒度革命
大数据·网络·人工智能·安全·网络安全·政务
菩提小狗5 小时前
每日安全情报报告 · 2026-11-04
网络安全·漏洞·cve·安全情报·每日安全
杨凯凡9 小时前
IT日报|2026-11-04:Copilot 接入 JetBrains Air、CodeQL 2.27.3、Agent 依赖自动更新
网络安全·github copilot·codeql·ai coding·dependabot
航天智算1 天前
航天智算 HTZS-1700 全信创网络安全移动工作站深度评测
网络安全·国产算力·国产化改造·算力适配·测绘信创
longzhizhui9261 天前
Ubuntu 全版本 CVE-2026-98432 内核安全升级操作手册
ubuntu·网络安全·云计算·bash
万联WANFLOW1 天前
CVE-2026-98432 等漏洞自查:AI 查出的 Linux、Windows 漏洞,运维怎么确认受不受影响
linux·运维·windows·网络安全
一支蜉蝣1 天前
Day26 XD安全学习笔记--PHP 应用&模版引用&Smarty渲染&MVC 模型&数据联动&RCE 安全
笔记·网络安全·html·php
kingx32 天前
Bugku WEB 题解总集:文件包含 / SQLi / 反序列化 / SSTI / 反爬 / 组件漏洞
web安全·网络安全·ctf·bugku
我爱学习_zwj2 天前
IP 地址与子网划分
网络协议·网络安全
重生之我在番茄自学网安拯救世界3 天前
AI 开发者日报 第1期(本周精选)| 插件市场投毒、智能体搞出“官僚饥荒村”,十年前的 CNN 打赢大模型
人工智能·网络安全·大模型·ai编程·智能体