Composer安装ThinkPHP提示:topthink/framework ^6.1,找到了topthink/framework[v6.1.0,...,v6.1.5]但是这些没有被加载,因为它们受到安全建议("PKSA-qzw1-yq5b-y8j5,PKSA-wpgp-v5cy-4kds")的影响

ScreenShot_2026-11-02_083310_855

原因说明

topthink/think-filesystem:^2.0 硬性依赖 league/flysystem ^2.0; flysystem 2.0.x < 2.1.1 存在高危漏洞 CVE-2021-32708(RCE 远程代码执行),对应你报错里两个 PKSA 编号,新版 Composer(2.9+)默认拦截带安全漏洞的包安装,所以装不上Packagist。

漏洞触发前提:用户可控上传文件名、不做文件名白名单校验、上传目录允许执行 PHP,内网 / 严格校验上传的场景风险才低,公网业务不建议直接忽略Ubuntu。

补充:topthink/think-filesystem 3.0 适配 flysystem v3,无这个漏洞,适合 ThinkPHP8;2.0 是给 TP6 的老版本,官方没有升级依赖到 flysystem 2.1.1+。

方案 1(推荐,优先):升级 think-filesystem 到 v3(TP8)

composer require topthink/think-filesystem:^3.0

⚠️ 注意:v3 只适配 ThinkPHP8,TP6 不能直接升到 3.0,会报错。

方案 2(TP6 必须继续用 ^2.0,忽略漏洞)二选一写法

方式 A:composer.json 配置忽略(推荐写配置,方便维护)

{
    "config": {
        "policy": {
            "advisories": {
                "ignore-id": {
                    "PKSA-w9tt-7782-78jx": "内网项目,上传文件名严格校验,不受CVE-2021-32708影响",
                    "PKSA-pwh8-d4fr-nywn": "内网项目,上传文件名严格校验,不受CVE-2021-32708影响"
                }
            }
        }
    }
}

保存后执行安装:

composer require topthink/think-filesystem:^2.0

方式 B:临时命令行关闭安全拦截(不推荐长期用)

composer require topthink/think-filesystem:^2.0 --no-audit

方式 C:全局关闭安全拦截(不建议线上)

{
    "config": {
        "policy": {
            "advisories": {
                "block": false
            }
        }
    }
}

方案 3(折中,TP6,自己加固业务层,不忽略也不换包)

如果你是公网业务,不要忽略漏洞:

  1. 上传文件文件名强白名单校验,过滤特殊空白、unicode 空白字符;
  2. 上传目录禁止执行 PHP;
  3. 上传文件重命名(不要使用用户原始文件名);
  4. 禁止上传 php/phtml 等可执行后缀。
posted @ 2026-11-02 08:36  湘龍  阅读(10)  评论(0)    收藏  举报