当前位置:网站首页 >  攻略

网站跳转漏洞完整修复实操指南 零基础可直接上手落地操作

时间:2026年06月13日 07:13:48 来源:易频IT社区

一、漏洞前置验证步骤

1. 漏洞判定标准

只要满足以下任意一条即存在未授权跳转漏洞:网站存在url、redirect、go等跳转参数,传入外部域名可直接跳转到第三方站点;跳转前无域名白名单校验、校验逻辑可绕过。

2. 快速验证方法

直接在浏览器地址栏访问测试链接:https://你的域名.com/redirect?url=https://www.baidu.com,如果直接跳转到百度则确认存在漏洞。

二、分场景修复实操方案

1. 前端跳转漏洞修复

前端跳转大多为location.href赋值操作,必须统一封装跳转方法添加白名单校验,完整可复制代码如下:

```javascript // 合法跳转域名白名单,可根据实际业务需求新增 const ALLOWED_DOMAINS = [ window.location.host, '你的业务域名1.com', '你的业务域名2.com' ] function safeRedirect(targetUrl) { let url try { url = new URL(targetUrl, window.location.origin) } catch (e) { // 非法URL直接跳转到首页 window.location.href = '/' return } // 校验域名是否在白名单内 if (ALLOWED_DOMAINS.includes(url.host)) { window.location.href = url.href } else { window.location.href = '/' } } // 调用示例:替换原有直接赋值location.href的逻辑 // safeRedirect('要跳转的目标url') ```

重点:所有前端跳转逻辑必须统一调用该方法,禁止直接操作location.href赋值。

2. 后端Java场景修复

统一封装跳转校验工具类,所有Controller层跳转必须先调用该工具类校验,完整代码如下:

```java import java.net.URI; import java.net.URISyntaxException; import java.util.Arrays; import java.util.List; public class RedirectUtil { // 白名单配置建议放到application.yml等配置文件中,此处为示例 private static final List ALLOWED_DOMAINS = Arrays.asList( "你的业务域名1.com", "你的业务域名2.com" ); public static String getSafeRedirectUrl(String targetUrl, String defaultUrl) { if (targetUrl == null || targetUrl.trim().isEmpty()) { return defaultUrl; } try { URI uri = new URI(targetUrl); String host = uri.getHost(); // 相对路径直接放行,无需校验 if (host == null) { return targetUrl; } if (ALLOWED_DOMAINS.contains(host)) { return targetUrl; } } catch (URISyntaxException e) { // 非法URL直接返回默认地址 return defaultUrl; } return defaultUrl; } } ```

调用示例:

```java @GetMapping("/redirect") public String redirect(@RequestParam String url) { String safeUrl = RedirectUtil.getSafeRedirectUrl(url, "/"); return "redirect:" + safeUrl; } ```

3. 后端PHP场景修复

网站跳转漏洞完整修复实操指南 零基础可直接上手落地操作

封装统一校验方法,所有header跳转前必须调用校验,完整代码如下:

```php function getSafeRedirectUrl(string $targetUrl, string $defaultUrl = '/'): string { $allowedDomains = [ '你的业务域名1.com', '你的业务域名2.com' ]; $urlInfo = parse_url($targetUrl); // 相对路径直接放行 if (!isset($urlInfo['host'])) { return $targetUrl; } if (in_array($urlInfo['host'], $allowedDomains)) { return $targetUrl; } return $defaultUrl; } // 调用示例 $targetUrl = $_GET['url'] ?? '/'; $safeUrl = getSafeRedirectUrl($targetUrl); header("Location: $safeUrl"); exit; ```

4. 后端Node.js场景修复

封装统一校验方法,所有路由跳转前必须调用校验,完整代码如下:

```javascript const url = require('url'); const ALLOWED_DOMAINS = [ '你的业务域名1.com', '你的业务域名2.com' ]; function getSafeRedirectUrl(targetUrl, defaultUrl = '/') { try { const parsedUrl = new URL(targetUrl, 'http://temp-domain'); // 相对路径判断:如果host是临时域名说明传入的是站内相对路径 if (parsedUrl.host === 'temp-domain') { return targetUrl; } if (ALLOWED_DOMAINS.includes(parsedUrl.host)) { return targetUrl; } } catch (e) { return defaultUrl; } return defaultUrl; } // Express框架调用示例 app.get('/redirect', (req, res) => { const safeUrl = getSafeRedirectUrl(req.query.url, '/'); res.redirect(safeUrl); }); ```

三、修复后验证步骤

1. 正常功能验证

传入白名单内的域名跳转链接,确认可以正常跳转、业务功能不受影响,示例链接:https://你的域名.com/redirect?url=https://你的业务域名1.com/path

2. 漏洞验证

依次测试以下场景,确认全部跳转到默认页(一般为首页)即可判定修复完成: 1. 传入外部域名:https://你的域名.com/redirect?url=https://www.baidu.com; 2. 传入大小写混淆的外部域名:https://你的域名.com/redirect?url=HTTPS://WWW.BAIDU.COM; 3. 传入拼接绕过测试地址:https://你的域名.com/redirect?url=https://你的域名1.com.baidu.com; 4. 传入空url参数、乱码参数。

四、临时兜底防护方案

如果业务代码量太大无法一次性全量替换跳转逻辑,可先添加Nginx规则临时拦截,直接在站点配置的server块中添加以下规则即可:

```nginx 拦截跳转参数中携带外部域名的请求,可根据实际参数名新增规则 if ($arg_url ~ ^https?://(?!你的业务域名1\.com|你的业务域名2\.com)) { return 302 /; } if ($arg_redirect ~ ^https?://(?!你的业务域名1\.com|你的业务域名2\.com)) { return 302 /; } if ($arg_go ~ ^https?://(?!你的业务域名1\.com|你的业务域名2\.com)) { return 302 /; } ```

重点:该规则仅作为临时兜底方案,必须在1-3个工作日内完成业务代码层面的修复,避免规则被绕过。

五、常见坑点规避

  • 不要用后缀/包含匹配校验域名:比如校验url包含`你的域名.com`,会被`https://攻击者域名.com?x=你的域名.com`绕过
  • 不要只判断开头匹配:比如校验url以`你的域名.com`开头,会被`https://你的域名.com.攻击者域名`绕过
  • 禁止使用referer校验跳转合法性:referer可被任意篡改,完全不可靠
  • 白名单不要随意加泛域名:比如`.你的域名.com`如果存在子域名接管漏洞,会被攻击者利用实现合法跳转

相关推荐

最新

热门

推荐

精选

标签

易频IT社区是综合性互联网IT技术门户网站,专注分享网络技术、服务器运维、网络安全、编程开发、系统架构、云计算、大数据等行业干货,实时更新IT行业资讯、零基础教程、实战案例,为IT从业者、技术爱好者提供专业的学习交流平台。

Copyright © 2021-2026 易频IT社区. All Rights Reserved. 备案号:闽ICP备2023013482号 网站地图