Composer repositories 必须显式声明 type 和 URL,type 只能是 vcs/composer/package;禁用 Packagist 需全局配置 repo.packagist.org false;lock 文件不防源篡改,依赖 dist shasum 校验;autoload 与 autoload-dev 必须分离,CI 强制 --no-dev。

Composer 的 repositories 配置必须显式声明类型和 URL
企业私有包不走 Packagist,靠 repositories 拉取,但很多人只加了 URL 却漏掉 type,导致 Composer 直接忽略该源。常见错误现象是:运行 composer require vendor/private-package 时提示 Could not find package,而包明明在内部 GitLab 或 Satis 页面能访问。
-
type必须是vcs(Git/SVN)、composer(Satis/Artifactory)、或package(单包定义),不能留空或写错 - Git 类型仓库的 URL 必须可被 Composer CLI 访问(比如支持 SSH key 或 token 认证),HTTP URL 要带
.git后缀才被识别为 vcs - 如果用自建 Satis,
type: composer对应的 URL 是https://satis.example.com/packages.json,不是首页地址
用 composer config --global repo.packagist.org false 禁用 Packagist 是最有效的供应链隔离手段
很多团队以为只要把 repositories 写在 composer.json 里就能“优先走内网”,其实默认仍会 fallback 到 Packagist —— 这就是供应链攻击入口。一旦攻击者劫持了某公共包名(比如 monolog/monolog 的 typo 包),且你的锁文件没锁定哈希,就可能中招。
-
--global参数影响所有项目,比每个composer.json加"packagist.org": false更可靠 - 禁用后,所有依赖必须明确出现在你配置的私有源中,否则
composer install直接失败,强迫你审计每一项引入 - CI 流水线里务必检查
composer config --list | grep 'repo.packagist.org'输出是否为false,避免本地配置未同步
composer.lock 的 content-hash 和 packages 块哈希不等于防篡改
composer.lock 看似带哈希,但它只校验依赖树结构和版本号,不校验实际下载的 zip/tar.gz 文件内容。攻击者若污染了你的私有仓库(比如篡改 Git tag 对应的代码、或黑进 Satis 构建流程),lock 文件完全无法察觉。
工作流任务拆解与模型编排技能。使用场景:(1) 收到复杂工作任务需要拆解为可执行步骤,(2) 需要为不同步骤选择最合适的模型,(3) 需要跟踪工作流进度和模型使用情况,(4) 长时间任务卡住需要问题诊断和解决方案。
- 真正起作用的是
composer install --no-dev --prefer-dist --no-progress时触发的 dist 文件 SHA256 校验,前提是私有源返回的dist.shasum字段有效且未被绕过 - Git 源默认走
source(clone),跳过 shasum 校验;强制走 dist 需在repositories中加"no-api": true并确保服务端提供dist元数据 - Artifactory 用户要注意:开启 “Bypass checksum storage” 选项会直接丢弃客户端传来的 shasum,等于关掉校验
私有包的 autoload 和 autoload-dev 必须分离,且 CI 中禁用 autoload-dev
企业包常把测试工具、Mock 类、调试脚本全塞进 autoload-dev,但一旦有人误将 dev-main 或 dev-develop 发布到私有源,这些非生产代码就可能随 require 进入线上环境 —— 尤其当 composer install 在无 --no-dev 下运行时。
- CI 构建阶段必须加
--no-dev --optimize-autoloader,否则vendor/autoload.php会包含开发路径 - 私有包的
composer.json里,autoload只写"psr-4": {"Vendor\Package\": "src/"},autoload-dev单独列"tests/"和"stubs/" - 用
composer dump-autoload --classmap-authoritative可彻底排除未声明类的加载可能,适合高安全要求场景
真正难控的不是配置怎么写,而是谁有权往私有源推 tag、谁审批合并请求、以及 lock 文件更新是否强制绑定 MR 流程 —— 这些不在 Composer 文档里,但在每一次 composer update 之后都默默决定着你的依赖是不是真的可信。

















