【Web安全】逻辑漏洞之URL跳转漏洞:原理、场景与防御

文章目录

  • 前言
  • 一、漏洞本质
  • 二、攻击原理
    • 正常跳转流程
    • 漏洞触发流程
  • 三、抓包的关键时机:跳转参数生成时
  • 四、风险场景
    • 1.登录/注册后跳转
    • 2.退出登录跳转
    • 3.分享/广告链接跳转
    • 4.密码重置链接跳转
  • 五、漏洞挖掘:怎么找到这种漏洞?
    • 1.找到跳转参数
    • 2.篡改参数测试
    • 3.绕过网站的简单拦截
  • 六、漏洞危害:被利用后会发生什么?
  • 七、URL 跳转漏洞危害实例:从正常登录到信息被窃的全过程
    • 1. 正常登录流程(无漏洞时)
    • 2. 漏洞被利用:黑客如何构造恶意链接?
    • 3. 用户中招:信息如何被黑客获取?
    • 4. 最终危害:黑客拿到凭证后能做什么?
  • 八、与SSRF漏洞的区别
  • 九、防御方案:怎么堵住这个漏洞?
    • 1.用“白名单”限制跳转范围
    • 2.不用URL,用“编号”代替
    • 3.限制“内部跳转”,禁止跳外部
    • 4.加个“确认页”
  • 十、总结

往期文章

【Web安全】一次性搞懂 ReDOS 漏洞原理/检测/防御

【Web安全】一次性搞懂 XSS 漏洞原理/检测/防御

【Web安全】一次性搞懂 CSRF 漏洞原理/检测/防御

【Web安全】一次性搞懂 SSRF 漏洞原理/检测/防御

【Web安全】一次性搞懂越权漏洞原理/检测/防御

【Web安全】逻辑漏洞之支付漏洞:原理、场景与防御

【Web安全】小白也能懂的并发漏洞:原理、场景与防御

前言

在Web安全的逻辑漏洞里,URL跳转漏洞可能不像支付漏洞那样直接关联金钱,但它却像一个“恶意导航员”,能悄无声息地把用户引向钓鱼网站、病毒页面,进而导致账号被盗、信息泄露等问题。

简单说,当你点击一个“安全链接”,本应跳转到官方网站,结果却跳到了骗子仿造的假网站——这背后可能就是URL跳转漏洞在搞鬼。它的危害不在于复杂的技术,而在于利用用户对“正规网站”的信任,完成钓鱼、诈骗等攻击。

一、漏洞本质

URL跳转漏洞的核心是服务器对“跳转目标URL”的校验逻辑失效

正常情况下,网站的跳转功能(比如登录后跳回原页面、点击链接跳转到相关页面)需要先检查“要跳转到的URL”是否合法(比如是否属于官方域名、是否在允许的范围内);但如果存在漏洞,服务器可能直接信任用户传来的跳转地址,或者校验时偷懒(比如只检查开头几个字符),导致攻击者可以随意修改跳转目标,把用户“骗”到恶意网站。

一句话总结:“该拦的坏链接没拦住,该验证的地址没验证”

二、攻击原理

正常跳转流程

  1. 用户在网站上触发跳转(比如点击“登录后返回”“查看详情”按钮);
  2. 服务器生成跳转链接,其中包含目标URL参数(比如https://xxx.com/login?redirect=https://xxx.com/home);
  3. 服务器校验这个redirect参数里的URL是否合法(比如是否属于xxx.com域名);
  4. 校验通过后,用户被安全跳转到目标地址。

漏洞触发流程

  1. 攻击者发现网站的跳转链接里有可修改的参数(比如redirecturljump等);
  2. 攻击者篡改这个参数,把合法URL换成恶意地址(比如https://xxx.com/login?redirect=https://hack.com/fake);
  3. 服务器没有校验这个篡改后的URL(或者校验不严格),直接执行跳转;
  4. 用户点击链接后,被“骗”到恶意网站(比如仿造的登录页,用于盗取账号密码)。

三、抓包的关键时机:跳转参数生成时

URL跳转漏洞的攻击,关键是在**“生成跳转链接”的环节篡改参数**。

比如这些场景:

  • 登录页面:可能有redirect参数,用于登录后跳回原页面(例:https://xxx.com/login?redirect=https://xxx.com/user);
  • 退出登录:可能有logoutUrl参数,用于退出后跳转到首页(例:https://xxx.com/logout?logoutUrl=https://xxx.com/index);
  • 分享/广告链接:可能有url参数,用于跳转到目标页面(例:https://xxx.com/share?url=https://xxx.com/article)。

攻击者会用抓包工具(比如BurpSuite工具)抓住这些包含跳转参数的请求,把里面的合法URL改成恶意地址,再发给用户。

四、风险场景

URL跳转漏洞的危害主要是“诱导用户访问恶意网站”,常见场景有这些:

1.登录/注册后跳转

很多网站登录后会自动跳回用户之前浏览的页面,比如https://xxx.com/login?redirect=https://xxx.com/cart(登录后跳购物车)。

如果有漏洞,攻击者可以把redirect改成恶意地址(比如https://hack.com/fake-login),然后把链接伪装成“官方登录页”发给用户。用户点击后,先正常登录官方网站,接着被自动跳转到假登录页——由于假页面长得和官方一样,用户可能会再次输入账号密码,导致信息被黑客盗取。

2.退出登录跳转

退出登录时,网站可能会跳转到首页,参数类似https://xxx.com/logout?redirectUrl=https://xxx.com/index

攻击者篡改后,链接变成https://xxx.com/logout?redirectUrl=https://hack.com/fake-home。用户退出后,会被跳转到假首页,假页面可能会弹窗“账号异常,请重新登录”,诱导用户输入信息。

3.分享/广告链接跳转

比如某论坛的“分享到微博”功能,链接可能是https://xxx.com/share?url=https://weibo.com

攻击者篡改后,分享链接变成https://xxx.com/share?url=https://hack.com/virus。当其他用户点击“分享”时,会直接跳转到带病毒的页面。

4.密码重置链接跳转

有些网站重置密码后,会跳转回登录页,参数比如https://xxx.com/reset-password?jump=https://xxx.com/login

攻击者篡改后,用户重置密码成功后,会被跳转到假的“安全中心”,骗取银行卡信息等。

五、漏洞挖掘:怎么找到这种漏洞?

即使是安全小白,也能通过简单步骤测试是否存在URL跳转漏洞,核心是“找参数、改地址、测跳转”。

1.找到跳转参数

先在网站上找包含“跳转”功能的地方,看看链接里有没有类似这些参数:

  • redirect(最常见,比如登录后跳转)
  • url(比如点击链接跳转)
  • jump(比如按钮跳转)
  • target(比如页面内跳转)

例:在登录页看到链接https://xxx.com/login?redirect=https://xxx.com/home,这里的redirect就是要测试的参数。

2.篡改参数测试

把参数里的合法地址换成自己能控制的地址(比如自己的博客、团队官网,别用baidu.com这类常见域名,很多网站会拉黑它们),然后访问修改后的链接,看是否会跳转过去。

例:把redirect=https://xxx.com/home改成redirect=https://myblog.com/test,如果能成功跳转到myblog.com,说明可能有漏洞。

3.绕过网站的简单拦截

如果直接改域名被拦截(比如提示“不允许跳转外部链接”),可以试试这些小技巧:

  • @符号:比如https://xxx.com/login?redirect=https://xxx.com@myblog.com(网站可能只校验@前面的xxx.com,实际跳转到myblog.com);
  • 用IP代替域名:比如把myblog.com换成它的IP地址(1.2.3.4),有些网站只拦域名不拦IP;
  • 加特殊符号:比如在URL后加/#https://myblog.com/#),可能绕过简单校验。

这里绕过的更多操作可以参考:SSRF漏洞中的URL绕过的 3.3 章节。

六、漏洞危害:被利用后会发生什么?

最常见的危害是钓鱼攻击:如今AI来造一个高仿的假页面已经很难从肉眼分辨出来了。

  • 攻击者伪造一个和官方网站一模一样的假页面(比如假登录页、假支付页);
  • 通过URL跳转漏洞,诱导用户从正规网站“无缝跳转”到假页面;
  • 用户以为还在正规网站上,输入账号、密码、银行卡信息,这些信息会被攻击者获取。

此外,还可能导致:

  • 传播恶意软件:跳转至带病毒的页面,自动下载木马;
  • 损坏网站信誉:用户被骗后,会认为是官方网站不安全。

七、URL 跳转漏洞危害实例:从正常登录到信息被窃的全过程

为了让安全小白更直观理解 URL 跳转漏洞的危害,我们结合具体场景拆解:黑客如何利用漏洞,一步步获取用户的敏感信息。

场景背景
假设aaa.bb.com是一个正规网站(比如某购物平台),用户需要登录才能使用功能;aaa.cc.com是该网站的关联域名(比如官方帮助中心)。正常情况下,登录后会自动跳转到用户需要访问的页面。

1. 正常登录流程(无漏洞时)

  1. 用户访问登录页,链接为:https://aaa.bb.com/login?redirectUrl=aaa.cc.com
    这里的redirectUrl参数表示:登录成功后,自动跳转到aaa.cc.com(比如用户原本在浏览帮助中心,点击 “登录” 后,登录成功会跳回帮助中心)
  2. 用户输入账号密码,点击 “登录”;
  3. 服务器验证账号密码正确后,检查redirectUrl参数中的aaa.cc.com是否为可信域名(比如属于官方允许的跳转范围);
  4. 校验通过,用户被安全跳转到aaa.cc.com,同时浏览器会记录登录状态(比如生成一个临时凭证req=qweasdzxc123,用于证明 “已登录”)。

整个过程中,用户始终在官方信任的域名内跳转,信息是安全的。

2. 漏洞被利用:黑客如何构造恶意链接?

黑客发现aaa.bb.com的登录页存在 URL 跳转漏洞 ——服务器没有校验redirectUrl参数,或者用了容易绕过的校验方式(比如只检查域名开头,不检查完整地址)。

于是,黑客做了两件事:

  1. 构造恶意登录链接:把redirectUrl换成自己控制的服务器地址11.2.12.4:8080(这是黑客电脑的 IP 和端口,用于监听用户信息),链接变成:https://aaa.bb.com/login?url=11.2.12.4:8080(这里的url参数和redirectUrl作用一样,都是控制跳转目标)。
  2. 用钓鱼手段诱导用户点击:比如伪装成 “官方活动链接”“账号异常需验证”,发给目标用户(用户看到链接开头是aaa.bb.com,会认为是正规网站,放松警惕)。

3. 用户中招:信息如何被黑客获取?

用户点击了黑客发的恶意链接https://aaa.bb.com/login?url=11.2.12.4:8080,接下来的流程对用户来说 “看似正常”,但实际上已陷入陷阱:

  1. 用户在aaa.bb.com的登录页输入账号密码(因为页面确实是正规网站的登录界面,用户不会怀疑);
  2. 服务器验证账号密码正确后,由于漏洞存在,直接按照url参数的指示,把用户跳转到11.2.12.4:8080(黑客的服务器);
  3. 此时,用户的浏览器会带着 “登录凭证”(比如之前提到的req=qweasdzxc123)跳转到黑客服务器 —— 这个凭证相当于 “已登录的通行证”,能证明用户在aaa.bb.com上的登录状态;
  4. 黑客早已在自己的服务器上启动了监听工具(nc -lvvp 11.2.12.4:8080,这行命令的作用是 “打开 8080 端口,等待并记录所有连接过来的信息”);
  5. 当用户的浏览器跳转到11.2.12.4:8080时,黑客的监听工具会捕获到用户的登录凭证req=qweasdzxc123

4. 最终危害:黑客拿到凭证后能做什么?

登录凭证req=qweasdzxc123是用户在aaa.bb.com上的 “身份令牌”,黑客拿到后可以:

  • 直接用这个凭证访问aaa.bb.com(无需登录密码),查看用户的个人信息(姓名、电话、地址等);
  • 操作用户账号(比如购物平台的话,可能盗用优惠券、发起订单;社交平台的话,可能冒充用户发送诈骗信息);
  • 如果用户在aaa.bb.com绑定了银行卡、支付账号,甚至可能导致财产损失。

八、与SSRF漏洞的区别

很多小白会把URL跳转漏洞和SSRF漏洞搞混,其实它们的“攻击对象”完全不同:

区别URL跳转漏洞SSRF漏洞
受害者普通用户(客户端)服务器(网站后台)
行为诱导用户跳转到恶意网站诱导服务器主动请求恶意地址
例子你点了一个链接,从官网跳到假网站黑客让淘宝服务器主动去访问他的恶意服务器

九、防御方案:怎么堵住这个漏洞?

核心原则:不要相信用户传来的任何跳转地址,服务器自己把控跳转目标

1.用“白名单”限制跳转范围

服务器只允许跳转到提前设定好的合法域名(比如官网的域名xxx.com、合作网站域名),其他地址一律拒绝。

例:如果网站只允许跳转到xxx.compartner.com,那么当redirect参数是myblog.com时,直接拦截,不执行跳转。

2.不用URL,用“编号”代替

不直接在参数里写跳转地址,而是给每个合法地址编一个号,参数只传编号。

例:用redirect=1代表跳转到xxx.com/homeredirect=2代表跳转到xxx.com/cart。服务器收到编号后,自己去查对应的合法地址,再执行跳转。这样攻击者改编号也没用(不知道哪个编号对应哪个地址)。

3.限制“内部跳转”,禁止跳外部

如果网站不需要跳转到外部域名,就明确规定:只能在自己的域名内跳转(比如xxx.com下的页面),一旦发现跳转地址包含其他域名,直接拦截。

4.加个“确认页”

在跳转前,给用户一个提示:“即将跳转到xxx网站,是否继续?”让用户有机会发现异常(比如看到要跳转到陌生网站,就取消操作)。

十、总结

URL跳转漏洞的本质,是服务器对“跳转地址”的校验太松懈,让攻击者有机可乘。它不像支付漏洞那样直接影响金钱,但却能通过钓鱼等方式间接危害用户的信息和财产安全。

对于普通用户:点击链接后,如果发现跳转的页面和预期不符(比如突然出现陌生登录框),一定要提高警惕,别轻易输入信息。

对于开发者:记住“客户端传来的跳转地址都不可信”,用白名单、编号映射等方法,让服务器牢牢控制跳转目标。只有这样,才能挡住那些“恶意导航员”。

本文是「Web安全基础」系列的第 8 篇,点击专栏导航查看全部系列内容。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/pingmian/90674.shtml
繁体地址,请注明出处:http://hk.pswp.cn/pingmian/90674.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

新手开发 App,容易陷入哪些误区?

新手开发 App 时,常因对流程和用户需求理解不足陷入误区,不仅拖慢进度,还可能导致产品无人问津。​功能堆砌是最常见的陷阱。不少新手总想 “一步到位”,在初期版本就加入十几项功能,比如做社区团购 App 时&#xff0c…

Linux学习篇11——Linux软件包管理利器:RPM与YUM详解与实战指南,包含如何配置失效的YUM镜像地址

引言 本文主要梳理 Linux 系统中的软件包的概念,同时介绍RPM与YUM两大核心管理工具的常用指令、区别联系以及实战技巧等。本文作为作者学习Linux系统的第11篇文章,依旧旨在总结当前的学习内容,同时巩固知识以便日后的学习复习回顾。如有说的…

Vue3+ElementPlus实现可拖拽/吸附/搜索/收起展开的浮动菜单组件

在开发后台管理系统时,我们经常会用到浮动菜单来快速访问某些功能。本篇文章将分享一个基于 Vue3 ElementPlus 实现的浮动菜单组件,支持拖拽移动、边缘吸附、二级菜单展开、菜单搜索过滤、视频弹窗等交互效果,极大提升了用户操作的便捷性与美…

CSS 盒子模型学习版的理解

文章目录一、盒子模型构建流程(一句话抓关键)二、核心逻辑提炼三、代码验证四、一句话总结流程通过手绘图示,清晰拆解 Content(内容)→ Padding(内边距)→ Border(边框)→…

解决线程安全的几个方法

线程安全:线程安全问题的发现与解决-CSDN博客 Java中所使用的并发机制依赖于JVM的实现和CPU的指令。 所以了解并掌握深入Java并发编程基础的前提知识是熟悉JVM的实现了解CPU的指令。 1.volatile简介 在多线程并发编程中,有两个重要的关键字&#xff1a…

大模型应用班-第2课 DeepSeek使用与提示词工程课程重点 学习ollama 安装 用deepseek-r1:1.5b 分析PDF 内容

DeepSeek使用与提示词工程课程重点Homework:ollama 安装 用deepseek-r1:1.5b 分析PDF 内容python 代码建构:1.小模型 1.5b 可以在 笔记本上快速执行2.分析结果还不错3. 重点是提示词 prompt 的写法一、DeepSeek模型创新与特点1. DeepSeek-V3模型特点采用…

在FreeBSD系统下使用llama-cpp运行飞桨开源大模型Ernie4.5 0.3B(失败)

先上结论,截止到目前2025.7.25日,还不能用。也就是Ernie4.5模型无法在llama.cpp 和Ollama上进行推理,原因主要就llama是不支持Ernie4.5异构MoE架构。 不局限于FreeBSD系统,Windows也测试失败,理论上Ubuntu下也是不行。…

OpenCV图像梯度、边缘检测、轮廓绘制、凸包检测大合集

一、图像梯度 在图像处理中,「梯度(Gradient)」是一个非常基础但又极其重要的概念。它是图像边缘检测、特征提取、纹理分析等众多任务的核心。梯度的本质是在空间上描述像素灰度值变化的快慢和方向。 但我们如何在图像中计算梯度?…

GitHub 趋势日报 (2025年07月25日)

📊 由 TrendForge 系统生成 | 🌐 https://trendforge.devlive.org/ 🌐 本日报中的项目描述已自动翻译为中文 📈 今日获星趋势图 今日获星趋势图1814Resume-Matcher985neko714Qwen3-Coder622OpenBB542BillionMail486hrms219hyper…

编程语言Java——核心技术篇(五)IO流:数据洪流中的航道设计

🌟 你好,我是 励志成为糕手 ! 🌌 在代码的宇宙中,我是那个追逐优雅与性能的星际旅人。 ✨ 每一行代码都是我种下的星光,在逻辑的土壤里生长成璀璨的银河; 🛠️ 每一个算法都是我绘制…

基于FPGA的16QAM软解调+卷积编码Viterbi译码通信系统,包含帧同步,信道,误码统计,可设置SNR

目录 1.引言 2.算法仿真效果 3.算法涉及理论知识概要 3.1 16QAM调制软解调原理 3.2 帧同步 3.3 卷积编码,维特比译码 4.Verilog程序接口 5.参考文献 6.完整算法代码文件获得 1.引言 基于FPGA的16QAM软解调卷积编码Viterbi译码通信系统开发,包含帧同步,高斯…

Python数据分析基础(二)

一、Numpy 常用函数分类概览函数类别常用函数基本数学函数np.sum(x)、np.sqrt(x)、np.exp(x)、np.log(x)、np.sin(x)、np.abs(x)、np.power(a, b)、np.round(x, n) 等统计函数np.mean(x)、np.median(x)、np.std(x)、np.var(x)、np.min(x)、np.max(x)、np.percentile(x, q) 等比…

Colab中如何临时使用udocker(以MinIO为例)

本文主要是想记录一下自己在Colab中用udocker启动一个MinIO的容器的过程。 1. 命令行配置环境 由于目前没有用到GPU,所以我选择的是CPU的环境。(内存12G)然后就可以在命令行里安装udocker了,并配置minio的环境 # 由于minio需要做两个端口映射&#xff0c…

rt-thread 5.2.1 基于at-start-f437开发过程记录

基于rt-thread 5.2.1 bsp/at/at32f437-start进行开发,记录详细过程,包括中间遇到的各种坑。 at32f437-start原理图 自己设计的电路板主要换了一块小封装的同系列芯片, 目标是移植opENer。 1. 开发环境 env长时间不用,有点忘了。这次新下载…

EMCCD相机与电可调变焦透镜的同步控制系统设计与实现

EMCCD相机与电可调变焦透镜的同步控制系统设计与实现 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家,觉得好请收藏。点击跳转到网站。 摘要 本文详细介绍了基于Python的EMCCD相机&#xff0…

前缀和-560.和为k的子数组-力扣(LeetCode)

一、题目解析1.子数组是数组中元素的连续非空序列2.nums[i]范围为[-1000,1000],存在负数3.由于2的题目条件,该题不能用双指针算法,不具备单调性 二、算法原理解法1:暴力解法->枚举 O(N^2)固定一个值,向后枚举数组和…

解决企业微信收集表没有图片、文件组件,不能收集图片的问题

问题: 企业微信里面的收集表功能,有一个图片收集的收集表,但是插入的组件没有收集图片的组件? 原因: 大概率是微盘未启用 解决方法: 1、登陆企业微信管理后台 企业微信 2、访问微盘页面,…

认识单片机

《认识单片机》课程内容 一、课程导入 在我们的日常生活中,有很多看似普通却充满智慧的小物件。比如家里的智能电饭煲,它能精准地控制煮饭的时间和温度,让米饭煮得香喷喷的;还有楼道里的声控灯,当有人走过发出声音时&a…

数据结构(2)顺序表算法题

一、移除元素1、题目描述2、算法分析 思路1:查找val值对应的下标pos,执行删除pos位置数据的操作。该方法时间复杂度为O(n^2),因此不建议使用。思路2:创建新数组(空间大小与原数组一致&#xff0…

汽车电子架构

本文试图从Analog Devices官网中的汽车解决方案视角带读者构建起汽车电子的总体架构图,为国内热爱和从事汽车电子行业的伙伴们贡献一份力量。 一 、汽车电子架构总览 整个汽车电子包括四个部分:车身电子(Body Electronics)、座舱与…