怎么通过配置文件修复Yii 2.0.40路径穿越漏洞

雨磊同学_6778

雨磊同学_6778

2026-10-23

283人浏览

原创

yii 2.0.40路径穿越漏洞需三层协同修复:1. 配置文件中严格定义aliases并仅允许可信根目录;2. 代码层调用saferesolvepath校验路径合法性;3. nginx/apache配置添加正则拦截../等恶意路径,实现框架、应用、服务器级防护闭环。

怎么通过配置文件修复yii 2.0.40路径穿越漏洞

Yii 2.0.40 中的路径穿越漏洞(Path Traversal)通常出现在文件操作逻辑中,例如 file_get_contents()、fopen()、readfile() 或 Yii::getAlias() 配合用户可控路径参数使用时,未对输入做严格校验,导致攻击者通过 ../ 等序列突破目录限制,读取或写入任意服务器文件(如 ../../etc/passwd)。

这类漏洞不源于 Yii 框架本身硬编码缺陷,而多出自开发者自定义代码——尤其是控制器中处理文件下载、静态资源代理、模板渲染等场景。因此,“通过配置文件修复”并非修改某个现成的 .ini 或 main.php 开关即可一劳永逸,而是在配置层建立防御边界 + 在关键路径处强制约束行为。以下是具体可落地的配置与代码协同修复方式:

1. 用 aliases 和 basePath 锁死可信根目录

在 config/web.php 或 common/config/main.php 中明确定义并仅允许使用受控别名:

'aliases' => [
    '@webroot' => dirname(__DIR__) . '/web',
    '@upload'  => dirname(__DIR__) . '/web/uploads', // 仅允许上传目录
    '@template'=> dirname(__DIR__) . '/views/custom', // 模板专用目录
],

✅ 关键操作:所有涉及路径拼接的地方,必须用 Yii::getAlias('@upload') 替代硬编码路径;禁止直接拼接 $_GET['file'] 到 dirname(__DIR__) 后。

2. 在组件配置中禁用危险解析行为

若项目启用了 UrlManager 的 enablePrettyUrl,且存在自定义路由规则映射到文件服务(如 /download?id=xxx),需在 components 中关闭可能引入风险的配置:

'urlManager' => [
    'enablePrettyUrl' => true,
    'showScriptName' => false,
    'rules' => [
        // ❌ 危险示例(避免):
        // 'download/<file>' => 'site/download',
        // ✅ 改为白名单ID映射(不暴露路径):
        'download/<id:>' => 'site/download',
    ],
],</id:></file>

并在 SiteController::actionDownload($id) 中查数据库获取真实文件路径,绝不接受原始文件名参数。

Pandas 配置文件报告生成器
Pandas 配置文件报告生成器

使用ydata-profiling(前身为pandas-profiling)生成全面的数据质量报告,包含相关性分析、缺失值模式和基数检测。导出交互式HTML仪表板和JSON摘要。

下载

3. 为文件操作类添加全局路径白名单校验(推荐封装为行为)

在 components/SecurityHelper.php 中添加工具方法:

public static function safeResolvePath($userInput, $allowedBase = '@upload')
{
    $base = Yii::getAlias($allowedBase);
    $resolved = realpath($base . DIRECTORY_SEPARATOR . $userInput);

    if ($resolved === false || strpos($resolved, $base) !== 0) {
        throw new BadRequestHttpException('Invalid file path');
    }
    return $resolved;
}

然后在控制器中调用:

public function actionDownload()
{
    $filename = Yii::$app->request->get('f');
    $filepath = SecurityHelper::safeResolvePath($filename); // 自动拦截 ../
    return Yii::$app->response->sendFile($filepath);
}

4. Nginx/Apache 层补充防护(配置文件级兜底)

即使 PHP 层有校验,也应在 Web 服务器配置中屏蔽可疑路径访问。例如在 nginx.conf 的 server 块中加入:

location ~ \.\./ {
    return 403;
}
location ~ /\.(ht|git|svn|bak|swp)$ {
    deny all;
}

Apache 对应 .htaccess:

RewriteEngine On
RewriteCond %{THE_REQUEST} \.\. [NC]
RewriteRule ^ - [F,L]

这些规则不依赖 PHP,能直接拦截恶意请求,属于配置文件可完成的硬性防护。

不复杂但容易忽略的是:路径穿越修复从来不是改一个配置就能闭环的事,它需要框架配置约束 + 应用代码校验 + Web 服务器拦截三层协同。重点不在“Yii 版本是否修复”,而在你是否切断了用户输入通往 realpath() 或 file_get_contents() 的任意路径。

相关文章

PHP速学视频免费教程(入门到精通)
PHP速学视频免费教程(入门到精通)

PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

相关专题

更多
PHP Yii框架专题
PHP Yii框架专题

本专题专注于PHP主流框架Yii的应用,系统讲解MVC架构、路由机制、数据库操作、表单处理、安全验证与RESTful API 开发等核心内容。通过电商网站、后台管理系统与内容管理平台等实战项目,帮助学员快速掌握Yii框架的开发技巧与实战经验。

2025.09.04

3050

22

Gradle插件开发入门教程
Gradle插件开发入门教程

本专题介绍Gradle插件开发的基本流程,涵盖插件类编写、自定义任务注册、扩展参数设计和插件应用方法,帮助你理解插件如何组织构建逻辑,减少多个项目之间的重复配置。

2026.10.22

0

11

Gradle Wrapper配置教程
Gradle Wrapper配置教程

本专题介绍Gradle Wrapper的基本作用,涵盖文件组成、生成方法、版本配置和任务调用,帮助你理解项目如何使用指定的Gradle版本,减少不同开发环境带来的构建差异。

2026.10.22

0

10

Golangci-lint检查器使用教程
Golangci-lint检查器使用教程

本专题整理Golangci-lint常用Linters的用途与配置方法,覆盖错误处理、无效代码、安全、复杂度、命名和依赖检查,帮助项目合理选规则。

2026.10.22

0

15

Gradle怎么构建Java项目
Gradle怎么构建Java项目

本专题介绍Gradle Java项目构建方法,涵盖Java插件配置、依赖声明、源码编译、测试执行和打包检查,帮助你理解各阶段的任务关系,逐步完成项目构建。

2026.10.22

0

10

PHP时间戳漏洞修复教程
PHP时间戳漏洞修复教程

本专题汇总PHP常见时间戳漏洞,包括2038年溢出、时区漂移、时间戳伪造、重放攻击、时间盲注与日志审计失效等,并给出升级64位环境、使用 DateTimeImmutable、统一UTC、严格超时校验、预处理绑定、hash_equals 比对等修复方案,帮助开发者快速排查和加固时间相关代码。

2026.10.22

0

25

Golangci-lint配置文件与规则设置
Golangci-lint配置文件与规则设置

本专题聚焦Golangci-lint YAML配置文件,讲清运行参数、规则启停、目录排除、问题过滤及严重级别设置,便于团队统一检查标准。

2026.10.22

0

15

Golangci-lint安装与入门教程
Golangci-lint安装与入门教程

本专题讲解Golangci-lint的安装、初始化、基础命令和首次代码检查,覆盖本地环境、Docker及多平台用法,帮助Go开发者快速上手。

2026.10.22

0

15

PHP2Shell高危漏洞修复教程
PHP2Shell高危漏洞修复教程

PHP2Shell漏洞是什么,哪些PHP版本和运行环境会受到影响,服务器应该如何检测与修复?本专题提供版本自查脚本、Linux与Docker升级命令、PHP-FPM和Apache排查步骤,以及修复验证、临时缓解和应急响应方案。

2026.10.22

40

12

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Yii Framework 2.0 API 官方文档
Yii Framework 2.0 API 官方文档

共0课时 | 0人学习

Yii2.0框架开发实战视频教程
Yii2.0框架开发实战视频教程

共22课时 | 9.3万人学习