讲师中心 微信公众号
AI工具推荐 视频效率加速

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

雨磊同学_6778

雨磊同学_6778

发布时间:2026-10-23 13:20:22

|

283人浏览过

|

来源于php中文网

原创

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:\d+>' => 'site/download',
    ],
],

并在 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() 的任意路径。

热门AI工具

更多
DeepSeek

DeepSeek是一款面向对话、写作、编程和推理场景的AI大模型工具。

切问学术

切问学术是一款AI论文写作工具,复旦大学NLP团队推出的AI学术智能体。

VibeKnow
VibeKnow Hot

一款AI视频创作工具,主要用于全球首个AI知识视频创作平台,文档、文章、网页,一键生成视频,适合需要提升相关任务效率的用户。

WorkBuddy

一款AI办公效率工具,主要用于腾讯云推出的AI原生桌面智能体工作台,适合需要提升相关任务效率的用户。

蛙蛙写作

一款AI论文写作工具,主要用于超级AI智能写作助手,适合需要提升相关任务效率的用户。

讯飞智作

讯飞智作是一款AI视频创作工具,AI文本配音工具,数字人课程、营销视频制作。

PixPix
PixPix Hot

PixPix是一款面向电商视觉生产的AI商品图生成工具。

Loomy
Loomy Hot

一款AI工具,主要用于科大讯飞发布的桌面级 AI 助理,比 OpenClaw 更易用、更安全!,适合需要提升相关任务效率的用户。

豆包大模型

豆包大模型是一款由字节跳动推出的企业级大语言模型服务平台。

相关专题

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

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

3050

2025.09.04

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

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

0

2026.10.22

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

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

0

2026.10.22

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

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

0

2026.10.22

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

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

0

2026.10.22

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

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

0

2026.10.22

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

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

0

2026.10.22

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

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

0

2026.10.22

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

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

40

2026.10.22

热门下载

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

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
第六期_前端基础
第六期_前端基础

共107课时 | 23.9万人学习

PHP安全与漏洞
PHP安全与漏洞

共12课时 | 2.5万人学习

Yii Framework 2.0 API 官方文档
Yii Framework 2.0 API 官方文档

共0课时 | 0人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn