yii 1.1.28 非官方版本,实际最新稳定版为 1.1.27;若检测到 1.1.28 需核查来源合法性与代码完整性,防止后门;cve-2020-15148 仅影响 yii 2.x,应升级至 2.0.38 或应用临时补丁;yii 1.1.x 需禁用危险函数、重置 cookievalidationkey、关闭调试模式并替换 unserialize 为 json_decode。

Yii框架出现漏洞时,必须立即判断版本号与漏洞类型,Yii 1.1.28 并非官方发布的正式版本,实际最新稳定版 Yii 1.1.x 系列为 1.1.27(发布于2020年),而 1.1.28 不存在于 Yii 官方 GitHub 仓库或 Packagist 发布记录中,该数字极可能是误标或第三方魔改版本编号;若项目中确有自称“1.1.28”的包,需优先核查其来源合法性与代码完整性,防止植入后门。
确认真实版本与漏洞归属
执行 php yii version 或查看 framework/YiiBase.php 中的 VERSION 常量,确认是否为官方 1.1.27 —— 若显示 1.1.28,则说明框架已被修改,【不可直接信任其安全性】。
检查 composer.lock 文件中 "yiisoft/yii" 的 exact version 字段,比对 Packagist 上 1.1.27 的 SHA-256 校验值(e9a3b4c…)。
运行 git log -n 5 --oneline vendor/yiisoft/yii,观察最近提交是否来自官方作者 @qiangxue 或 @cebe;若提交者为陌生账户,立即隔离该环境。
针对 CVE-2020-15148 的应急处置(仅影响 Yii 2.x)
方法一:升级至安全版本
将 composer.json 中 "yiisoft/yii2" 版本约束改为 "~2.0.38" → 执行 composer update yiisoft/yii2 → 验证 vendor/yiisoft/yii2/CHANGELOG.md 是否含 “2.0.38 — Fixed CVE-2020-15148” 条目。
方法二:临时补丁(不升级时使用)
定位到 vendor/yiisoft/yii2/db/BatchQueryResult.php,在 __destruct() 方法开头插入:if (!is_object($this->_dataReader)) { return; }。
【此补丁仅拦截非对象输入,无法防御已构造的反序列化链,必须配合 input 过滤】
Yii 1.1.x 系列的通用加固措施
第一步:禁用危险 PHP 函数
在 php.ini 中设置 disable_functions = unserialize,eval,assert,call_user_func,call_user_func_array,重启 PHP-FPM。
第二步:重写 cookieValidationKey
打开 protected/config/main.php,找到 'cookieValidationKey' → 将其值替换为 32 位以上随机字符串(如 openssl rand -hex 16 生成),【旧 key 生成的所有 Cookie 立即失效,用户需重新登录】。
第三步:关闭调试模式
确认 YII_DEBUG 为 false,且 YII_ENV 设为 'prod';删除所有 protected/runtime/logs/*.log 中含 eval(、system( 的可疑日志行。
第四步:限制反序列化入口
全局搜索项目中所有 unserialize( 调用,将形如 unserialize($_GET['data']) 的代码全部替换为 json_decode($_GET['data'], true),并校验 JSON 格式有效性。











